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
です。
クラスのメンバー (入れ子にされているクラスを含む) は public、protected internal、protected、internal、private、または private protected のいずれかとして宣言することができます。 メンバーは既定で private
です。
詳細については、「アクセス修飾子」を参照してください。
型パラメーターを持つジェネリック クラスを宣言することができます。 詳細については、「ジェネリック クラス」を参照してください。
クラスには、次のメンバーの宣言を含めることができます。
例
ここでは、クラスのフィールド、コンストラクター、メソッドの宣言例を示します。 また、オブジェクト インスタンスの作成とインスタンス データの出力の例も示します。 次の例では、2 つのクラスが宣言されています。 最初の Child
クラスには、2 つのプライベート フィールド (name
と age
)、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# の構文と使用法に関する信頼性のある情報源です。
関連項目
.NET