次の例に示すように、クラスはキーワード class
を使用して宣言されます。
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
注釈
C# では、単一継承のみが許可されます。 つまり、クラスは 1 つの基底クラスからのみ実装を継承できます。 ただし、クラスは複数のインターフェイスを実装できます。 次の表は、クラスの継承とインターフェイスの実装の例を示しています。
継承 | 例 |
---|---|
無し | class ClassA { } |
シングル | class DerivedClass : BaseClass { } |
なし、2 つのインターフェイスを実装します | class ImplClass : IFace1, IFace2 { } |
シングル、1 つのインターフェイスを実装 | class ImplDerivedClass : BaseClass, IFace1 { } |
他のクラス内で入れ子にされていない名前空間内で直接宣言するクラスは、 パブリック または 内部にすることができます。 クラスは既定で internal
されます。
入れ子になったクラスを含むクラス メンバーは、パブリック、保護された内部、保護、内部、プライベート、またはプライベートで保護できます。 メンバーは既定で 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