class (C# リファレンス)

クラスは、次の例に示すように、キーワード class を使用して宣言します。

class TestClass
{
    // Methods, properties, fields, events, delegates
    // and nested classes go here.
}

注釈

C# では、単一継承のみを使用できます。 つまり、クラスは 1 つの基底クラスの実装だけを継承できます。 ただし、クラスは複数のインターフェイスを実装できます。 クラスの継承とインターフェイスの実装の例を次の表に示します。

継承
なし class ClassA { }
Single class DerivedClass : BaseClass { }
なし。2 つのインターフェイスを実装 class ImplClass : IFace1, IFace2 { }
1 つ。1 つのインターフェイスを実装 class ImplDerivedClass : BaseClass, IFace1 { }

名前空間内で直接宣言され、他のクラスに入れ子にされていないクラスは、public または internal のいずれかです。 クラスは既定で internal です。

クラスのメンバー (入れ子にされているクラスを含む) は publicprotected internalprotectedinternalprivate、または private protected のいずれかとして宣言することができます。 メンバーは既定で private です。

詳細については、「アクセス修飾子」を参照してください。

型パラメーターを持つジェネリック クラスを宣言することができます。 詳細については、「ジェネリック クラス」を参照してください。

クラスには、次のメンバーの宣言を含めることができます。

ここでは、クラスのフィールド、コンストラクター、メソッドの宣言例を示します。 また、オブジェクト インスタンスの作成とインスタンス データの出力の例も示します。 次の例では、2 つのクラスが宣言されています。 最初の Child クラスには、2 つのプライベート フィールド (nameage)、2 つのパブリック コンストラクター、および 1 つのパブリック メソッドがあります。 2 番目のクラスである StringTest は、Mainの格納に使用されます。

class Child
{
    private int age;
    private string name;

    // Default constructor:
    public Child()
    {
        name = "N/A";
    }

    // Constructor:
    public Child(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    // Printing method:
    public void PrintChild()
    {
        Console.WriteLine("{0}, {1} years old.", name, age);
    }
}

class StringTest
{
    static void Main()
    {
        // Create objects by using the new operator:
        Child child1 = new Child("Craig", 11);
        Child child2 = new Child("Sally", 10);

        // Create an object using the default constructor:
        Child child3 = new Child();

        // Display results:
        Console.Write("Child #1: ");
        child1.PrintChild();
        Console.Write("Child #2: ");
        child2.PrintChild();
        Console.Write("Child #3: ");
        child3.PrintChild();
    }
}
/* Output:
    Child #1: Craig, 11 years old.
    Child #2: Sally, 10 years old.
    Child #3: N/A, 0 years old.
*/

コメント

前の例で、プライベート フィールド (name および age) にアクセスできるのは、Child クラスのパブリック メソッドだけであることに注意してください。 たとえば、次のステートメントを使用して Main メソッドから子の名前を印刷することはできません。

Console.Write(child1.name);   // Error

Main から Childのプライベート メンバーへのアクセスは、Main がそのクラスのメンバーである場合にのみ可能です。

アクセス修飾子を指定せずにクラス内で宣言された型は既定で private になります。そのため、キーワードが削除されてもこの例のデータ メンバーは private です。

最後に、パラメーターなしのコンストラクターを使って作成したオブジェクト (child3) の age フィールドが、既定で 0 に初期化されていることに注意してください。

C# 言語仕様

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目