class (C# リファレンス)
クラスは、次の例に示すように、class キーワードを使用して宣言します。
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
解説
C++ とは異なり、C# で許可される継承は 1 つだけです。つまり、1 つの基本クラスの実装だけを継承できます。ただし、クラスは複数のインターフェイスを実装できます。クラスの継承とインターフェイスの実装の例を次の表に示します。
継承 | 例 |
---|---|
なし。 |
|
1 つ |
|
なし。2 つのインターフェイスを実装。 |
|
1 つ。1 つのインターフェイスを実装。 |
|
アクセス レベルの protected と private は、入れ子になったクラスだけで使用できます。
型パラメータを持つジェネリック クラスも宣言できます。詳細については、「ジェネリック クラス (C# プログラミング ガイド)」を参照してください。
クラスは、次のメンバを宣言できます。
使用例
ここでは、クラスのフィールド、コンストラクタ、メソッドの宣言例を示します。オブジェクト インスタンスの作成、インスタンス データの出力の例も示します。この例では、2 つのクラスを宣言します。Kid
クラスには、2 つのプライベート フィールド (name
および age
) と、2 つのパブリック メソッドがあります。2 番目のクラスである MainClass
は、Main
の格納に使用されます。
// keyword_class.cs
// class example
using System;
class Kid
{
private int age;
private string name;
// Default constructor:
public Kid()
{
name = "N/A";
}
// Constructor:
public Kid(string name, int age)
{
this.name = name;
this.age = age;
}
// Printing method:
public void PrintKid()
{
Console.WriteLine("{0}, {1} years old.", name, age);
}
}
class MainClass
{
static void Main()
{
// Create objects
// Objects must be created using the new operator:
Kid kid1 = new Kid("Craig", 11);
Kid kid2 = new Kid("Sally", 10);
// Create an object using the default constructor:
Kid kid3 = new Kid();
// Display results:
Console.Write("Kid #1: ");
kid1.PrintKid();
Console.Write("Kid #2: ");
kid2.PrintKid();
Console.Write("Kid #3: ");
kid3.PrintKid();
}
}
出力
Kid #1: Craig, 11 years old. Kid #2: Sally, 10 years old. Kid #3: N/A, 0 years old.
説明
上記の例で、プライベート フィールド (name
および age
) にアクセスできるのは、Kid
クラスのパブリック メソッドだけであることに注意してください。たとえば、次のステートメントを使用して Main
メソッドから子供の名前を出力できません。
Console.Write(kid1.name); // Error
Main
から Kid
のプライベート メンバへのアクセスは、Main
がそのクラスのメンバである場合にのみ可能です。
アクセス修飾子を指定せずにクラス内で宣言された型は、既定では private になるため、この例のデータ メンバは、キーワードが削除されても、private のままです。
また、既定のコンストラクタを使って作成したオブジェクト (kid3
) は、既定では、年齢フィールドが 0 に初期化されることに注意してください。
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
1.6 クラスとオブジェクト
3.4.4 クラスのメンバ
4.2.1 クラス型
10 クラス