C#入門 クラスの仕組みとサンプル

C#のクラスの仕組みとサンプルです。

目次

クラス クラスとは
  クラスのサンプル
クラスを利用する クラスからオブジェクト(インスタンス)を生成する
  クラスからオブジェクト(インスタンス)を生成しない

クラスとは

class クラス名 {
    フィールド
    メソッド
}
  • クラスは、フィールドとメソッドを定義できます。
  • フィールドはデータで、メソッドは処理を行います。
  • クラスは設計図や型枠のイメージです。
  • 機能を他のクラスに継承させることができます。
    C# クラスの継承の仕組みとサンプル

クラスのサンプル

クラスのサンプルです。
3~16行目までがClass1というクラスです。

using System;

class Class1
{
    private string moji = "色は"; //変数
    private string name; //変数

    public string getName()
    {
        return moji + name;
    }
    public void setName(string name)
    {
        this.name = name;
    }
}

3行目は、Class1というクラス名です。最初の文字を大文字にします。Pascal記法といいます。

5,6行目は、クラスの内部で宣言されている変数です。フィールドまたはメンバー変数といいます。
privateのためクラスの外部からアクセスすることができません。

8~15行目は、メソッドです。publicのためクラスの外部からアクセスすることができます。
クラス内の変数やメソッドのことをメンバーといいます。

8行目のstring getName()のstringは、string型の値を返すという意味です。
10行目のreturnは、値を返します。返される値を返り値または戻り値と呼びます。
12行目のstring nameのnameは、引数です。メソッドに値を渡します。
→8行目は()になっているので引数はありません。

 

クラスからオブジェクト(インスタンス)を生成する

クラスを利用する場合、クラスからオブジェクトを生成する場合と生成しない場合があります。

クラスからオブジェクトを生成する場合は、new演算子を使用してオブジェクト(インスタンス)を生成します。インスタンス化といいます。

データ型 変数 = new クラス名();    //クラスからインスタンスを生成

上記の図はクラスからオブジェクト(インスタンス)を3つ生成したときのイメージです。
オブジェクトごとにデータを管理できます。
例えると、クラスは設計図や型枠で、インスタンスは実体です。
以下は、MicrosoftのC#のクラスとオブジェクトのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/csharp/tour-of-csharp/classes-and-objects

コード

クラスからオブジェクトを生成して利用するサンプルです。
上記「クラスのサンプル」のClass1クラスからオブジェクトを生成します。

using System;
class Test1
{
    static void Main()
    {
        Class1 c1 = new Class1();
        Class1 c2 = new Class1();
        Class1 c3 = new Class1();

        c1.setName("赤");
        c2.setName("黄");
        c3.setName("青");

        Console.WriteLine(c1.getName()); // 色は赤です
        Console.WriteLine(c2.getName()); // 色は黄です
        Console.WriteLine(c3.getName()); // 色は青です
    }
}

6~8行目は、上記のClass1クラスのインスタンスを3つ生成しています。
Class1 c1のClass1は、変数の型で、c1は変数です。
この変数には、インスタンスの配置場所(メモリ上のアドレス)が入ります。

10~12行目は、メソッドを使用してインスタンスに値をセットしています。
ポイントは、インスタンスごとに保持するデータが異なる点です。
14~16行目は、メソッドを使用してインスタンスの値を表示しています。
構文は、変数.メソッド名です。

インスタンスを1つのみ生成したい場合は、シングルトンというデザインパターンを使用します。
C# シングルトン(Singleton)のサンプル

 

クラスからオブジェクト(インスタンス)を生成しない

クラスからオブジェクトを生成しないで利用するサンプルです。
static修飾子を追加します。new演算子がありませんが使用できます。

using System;

namespace Project1
{
    public static class Class1
    {
        public static int CNT = 123;
        public static void Print1()
        {
            Console.WriteLine("456");
        }
    }
    class Test1
    {
        static void Main()
        {
            Console.WriteLine(Class1.CNT);//123
            Class1.Print1(); //456
        }
    }
}

5~12行目は、Class1というクラスです。
7行目は、変数の前にstaticがついています。
static変数クラスフィールド静的フィールドとも呼ばれます。
8行目は、メソッドの前にstaticがついています。
staticメソッドクラスメソッド静的メソッドとも呼ばれます。
17行目は、newでオブジェクトを生成していませんがClass1クラスの変数を参照できます。
構文はクラス名.変数名です。
18行目もnewでオブジェクトを生成していませんがClass1クラスのメソッドを実行できます。
構文はクラス名.メソッド名です。
17,18行目とも参照先にstaticが付いていない場合は、コンパイルエラーになります。

関連の記事

C# クラスの継承の仕組みとサンプル
C# クラスのメソッド(名前/デフォルト/可変長引数)
C# クラスのメソッド(値渡し/参照渡し/戻り値が複数)
C# コンストラクタのサンプル
C# オーバーライドのサンプル
C# オーバーロードのサンプル

△上に戻る