.NET Visual C#言語入門 > クラス(class)
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
クラス(class)
プログラムの実行単位であり、一般的な個々のプログラムの集合体になります。
クラスは、C# で最も強力なデータ型です。クラスは、構造体と同様にデータ型のデータと動作を定義します。クラスを定義すると、そのクラスのインスタンスであるオブジェクトを作成できます。構造体と違って、クラスは、オブジェクト指向プログラミングの基本部分である継承をサポートします。
- クラスの概要
- クラスの宣言
- オブジェクトの作成
- クラスの継承
クラスの概要
クラスには、次の特徴があります。
- C++ と異なり、単一継承のみをサポートします。クラスは、1 つの基本クラスからのみ実装を継承できます。
- 1 つのクラスで複数のインターフェイスを実装できます。
- クラス定義は、別々のソース ファイルに分割できます。
- 静的クラスは、静的メソッドだけを含むシール・クラスです。
クラスの宣言
クラスは、次の例に示すように、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 つずつ含むパブリック クラスを定義しています。詳細については、「コンストラクタ 」を参照してください。このクラスは、new キーワードによってインスタンス化されています。
public class Manager : Employee { }
public class Person { public string name; // フィールド public Person() // コンストラクタ { name = "未定義"; } public void SetName(string newName) // メソッド { name = newName; } } class TestPerson { static void Main() { Person person1 = new Person(); System.Console.WriteLine(person1.name); person1.SetName("山田 太郎"); System.Console.WriteLine(person1.name); } }