クラス (C# プログラミング ガイド)
クラスは、C# で最も強力なデータ型です。クラスは、構造体と同様にデータ型のデータと動作を定義します。クラスを定義すると、そのクラスのインスタンスであるオブジェクトを作成できます。構造体と違って、クラスは、オブジェクト指向プログラミングの基本部分である継承をサポートします。詳細については、「継承 (C# プログラミング ガイド)」を参照してください。
クラスの宣言
クラスは、次の例に示すように、class キーワードを使用して定義します。
public class Customer
{
//Fields, properties, methods and events go here...
}
class キーワードは、アクセス レベルの後に配置します。この例では、public が使用されているため、だれもがこのクラスからオブジェクトを作成できます。class キーワードの後にクラス名を記述します。定義の残りの部分がクラス本体で、そこで動作とデータを定義します。クラスのフィールド、プロパティ、メソッド、およびイベントはクラス メンバと総称されます。
オブジェクトの作成
クラスとオブジェクトは、同義的に使用されることがありますが、これらは異なるものです。クラスはオブジェクトの型を定義しますが、オブジェクト自体ではありません。オブジェクトは、クラスに基づく具体的なエンティティであり、クラスのインスタンスと呼ばれることもあります。
オブジェクトを作成するには、次のように、new キーワードの後にオブジェクトの基になるクラスの名前を指定します。
Customer object1 = new Customer();
クラスのインスタンスを作成すると、そのオブジェクトへの参照が返されます。上の例の object1
は、Customer
に基づくオブジェクトへの参照です。この参照は、新しいオブジェクトを参照しますが、オブジェクト データ自体を含みません。実際、オブジェクト参照は、オブジェクトを作成しなくても作成できます。この例を次に示します。
Customer object2;
上のような、オブジェクトを参照しないオブジェクト参照を作成するのはお勧めできません。実行時にこのような参照を通じてオブジェクトへのアクセスを試みると失敗するからです。ただし、新しいオブジェクトを作成するか、既存のオブジェクトに割り当てると、このような参照でオブジェクトを参照できるようになります。この例を次に示します。
Customer object3 = new Customer();
Customer object4 = object3;
上のコードでは、同じオブジェクトを共に参照する 2 つのオブジェクトが作成されます。そのため、object3
を通じて行われたオブジェクトの変更は、その後、object4
を使用する際にも反映されます。これは、クラスに基づくオブジェクトが参照によって参照されるからです。このためクラスは参照型と呼ばれています。
クラスの継承
継承は、派生を使用して行われます。派生とは、データと動作の継承元である基本クラスを使用してクラスを宣言することを意味します。基本クラスは、派生クラス名の後に、コロンと基本クラス名を追加して指定します。この例を次に示します。
public class Manager : Employee
{
// Employee fields, properties, methods and events are inherited
// New Manager fields, properties, methods and events go here...
}
クラスで基本クラスを宣言している場合、基本クラスで定義されているクラス メンバもすべて新しいクラスの一部になります。基本クラス自体が別のクラスを継承したものであり、その別のクラスもさらに別のクラスを継承している可能性があるため、逆に言えば 1 つのクラスから多くの基本クラスが派生されることがあります。
例
次の例では、フィールド、メソッド、およびコンストラクタという特殊なメソッドをそれぞれ 1 つずつ含むパブリック クラスを定義しています。詳細については、「コンストラクタ (C# プログラミング ガイド)」を参照してください。このクラスは、new キーワードによってインスタンス化されています。
public class Person
{
// Field
public string name;
// Constructor
public Person()
{
name = "unknown";
}
// Method
public void SetName(string newName)
{
name = newName;
}
}
class TestPerson
{
static void Main()
{
Person person1 = new Person();
System.Console.WriteLine(person1.name);
person1.SetName("John Smith");
System.Console.WriteLine(person1.name);
}
}
出力
unknown
John Smith
クラスの概要
クラスには、次の特徴があります。
C++ と異なり、単一継承のみをサポートします。クラスは、1 つの基本クラスからのみ実装を継承できます。
1 つのクラスで複数のインターフェイスを実装できます。詳細については、「インターフェイス (C# プログラミング ガイド)」を参照してください。
クラス定義は、別々のソース ファイルに分割できます。詳細については、「部分クラス定義 (C# プログラミング ガイド)」を参照してください。
静的クラスは、静的メソッドだけを含むシール クラスです。詳細については、「静的クラスと静的クラス メンバ (C# プログラミング ガイド)」を参照してください。
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
1.6 クラスとオブジェクト
10 クラス
参照
関連項目
メンバ (C# プログラミング ガイド)
メソッド (C# プログラミング ガイド)
デストラクタ (C# プログラミング ガイド)
オブジェクト (C# プログラミング ガイド)