C# クラス (クラス)
目次
クラスを定義するときは、データ型の設計図を定義します。これは実際にはデータを定義しませんが、クラスの名前が何を意味するか、つまり、クラスのオブジェクトが何で構成され、このオブジェクトに対して実行できる操作を定義します。オブジェクトはクラスのインスタンスです。クラスを構成するメソッドと変数は、クラスのメンバーと呼ばれます。
クラス定義
クラス定義は、キーワード classで始まり 、その後にクラスの名前が続きます。一対の中括弧で囲まれたクラスの本体。クラス定義の一般的な形式は次のとおりです:
<アクセス指定子> class class_name
{ // メンバー変数<アクセス指定子> <データ型> variable1; <アクセス指定子> <データ型> variable2; ... <アクセス指定子> <データtype> variableN; // メンバー メソッド<アクセス指定子> <戻り値の型> method1(parameter_list) { // メソッド本体} <アクセス指定子> <戻り値の型> method2(parameter_list) { // メソッド本体} ... <アクセス指定子> <リターンタイプ>
ご注意ください:
- アクセス識別子 <access specifier> は、クラスとそのメンバーのアクセス ルールを指定します。指定しない場合、デフォルトのアクセス識別子が使用されます。クラスの既定のアクセス識別子は internalで 、メンバーの既定のアクセス識別子は privateです。
- データ型 <data type> は変数の型を指定し、戻り型 <return type> は返されたメソッドによって返されるデータ型を指定します。
- クラスのメンバーにアクセスするには、ドット (.) 演算子を使用します。
- ドット演算子は、オブジェクトの名前とメンバーの名前をリンクします。
次の例は、これまでに説明した概念を示しています。
例
using System;
namespace BoxApplication
{ class Box { public double length; // 長さpublic double width; // 幅public double height; // 高さ} class Boxtester { static void Main(string[] args) { Box Box1 = new Box( ); // Box1 を宣言、型は Box Box Box2 = new Box(); // Box2 を宣言、型は Box double volume = 0.0; // volume
// Box1 详述
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// Box2 详述
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// Box1 のボリューム
volume = Box1.height * Box1.length * Box1.breadth;
Console.WriteLine("Box1 のボリューム: {0}", volume);
// Box2 のボリューム
volume = Box2.height * Box2.length * Box2.breadth;
Console.WriteLine("Box2 のボリューム: {0}", volume);
Console.ReadKey();
} } }
上記のコードをコンパイルして実行すると、次の結果が生成されます。
Box1 的体积: 210
Box2 的体积: 1560
メンバー関数とカプセル化
クラスのメンバー関数は、他の変数と同様に、クラス定義にその定義またはプロトタイプを持つ関数です。クラスのメンバーとして、クラスの任意のオブジェクトを操作でき、オブジェクトのクラスのすべてのメンバーにアクセスできます。
メンバー変数は (設計上) オブジェクトのプロパティであり、カプセル化を実現するためにプライベートに保たれます。これらの変数には、パブリック メンバー関数を使用してのみアクセスできます。
上記の概念を使用して、クラス内のさまざまなクラス メンバーの値を設定および取得してみましょう。
例
システムを使用する;
名前空間BoxApplication
{ クラスボックス{ プライベート倍長; // 长度プライベート倍幅; // 宽度private double height; // 高度公開 void setLength( double len ) { length = len; }
public void setBreadth( double bre )
{ 幅 = bre; }
public void setHeight( double hei )
{ height = hei; } public double getVolume() { return length * width * height; } } class Boxtester { static void Main(string[] args) { Box Box1 = new Box(); / / Box1 を宣言、タイプは Box Box Box2 = new Box(); // Box2 を宣言、タイプは Box double volume; // volume
// Box1 の詳細
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Box2 の詳細
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// Box1 のボリューム
volume = Box1.getVolume();
Console.WriteLine("Box1 のボリューム: {0}" ,volume);
// Box2 のボリューム
volume = Box2.getVolume();
Console.WriteLine("Box2 のボリューム: {0}", volume);
Console.ReadKey();
} }
}
上記のコードをコンパイルして実行すると、次の結果が生成されます。
Box1 的体积: 210
Box2 的体积: 1560
C# のコンストラクター
クラス コンストラクターは 、クラスの新しいオブジェクトが作成されるときに実行されるクラスの特別なメンバー関数です。
コンストラクターの名前はクラスの名前とまったく同じで、戻り値の型はありません。
次の例は、コンストラクターの概念を示しています。
例
using System;
namespace LineApplication
{ class Line { private double length; // 行の長さpublic Line() { Console.WriteLine("オブジェクトが作成されました"); }
public void setLength( double len )
{ 長さ = len; } public double getLength() { 長さを返す; }
static void Main(string[] args)
{ Line line = new Line(); // 行の長さを設定line.setLength(6.0); Console.WriteLine("行の長さ: {0}", line.getLength ()) ; Console.ReadKey(); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます。
对象已创建
线条的长度: 6
デフォルトのコンストラクターに はパラメーターがありません。ただし、パラメーターを持つことができるパラメーターを持つコンストラクターが必要な場合、この種のコンストラクターはパラメーター化されたコンストラクターと呼ばれます。この手法は、オブジェクトの作成中に初期値をオブジェクトに割り当てるのに役立ちます。詳細については、次の例を参照してください。
例
using System;
namespace LineApplication
{ class Line { private double length; // ラインの長さpublic Line(double len) // パラメータ化されたコンストラクター{ Console.WriteLine("オブジェクトが作成されました、長さ = {0}", len );長さ = len; }
public void setLength( double len )
{ 長さ = len; } public double getLength() { 長さを返す; }
static void Main(string[] args)
{ Line line = new Line(10.0); Console.WriteLine("The length of the line: {0}", line.getLength()); // 行の長さを設定line. setLength(6.0 ); Console.WriteLine("行の長さ: {0}", line.getLength()); Console.ReadKey(); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます。
对象已创建,length = 10
线条的长度: 10
线条的长度: 6
C# のデストラクタ
クラス デストラクタは 、クラスのオブジェクトがスコープ外になったときに実行されるクラスの特別なメンバー関数です。
デストラクタの名前には、クラス名の前にチルダ (~) が付けられ、値を返さず、パラメータを取りません。
デストラクタは、プログラムを終了する前にリソースを解放するために使用されます (ファイルを閉じる、メモリを解放するなど)。デストラクタは、継承またはオーバーロードできません。
次の例は、デストラクタの概念を示しています。
例
using System;
namespace LineApplication
{ class Line { private double length; // 行の長さpublic Line() // コンストラクタ{ Console.WriteLine("object created"); } ~Line() // デストラクタ{ Console .WriteLine("オブジェクトが削除されました"); }
public void setLength( double len )
{ 長さ = len; } public double getLength() { 長さを返す; }
static void Main(string[] args)
{ Line line = new Line(); // 行の長さを設定line.setLength(6.0); Console.WriteLine("行の長さ: {0}", line.getLength ()) ; } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます。
对象已创建
线条的长度: 6
对象已删除
C# クラスの静的メンバー
staticキーワードを使用して 、クラス メンバーを静的として定義できます。クラス メンバーを static として宣言すると、クラスのオブジェクトがいくつ作成されても、静的メンバーのコピーは 1 つしかないことを意味します。
キーワード static は、 クラス内にメンバーのインスタンスが 1 つしかないことを意味します。静的変数は、クラスのインスタンスを作成せずにクラスを直接呼び出すことで値を取得できるため、定数を定義するために使用されます。静的変数は、メンバー関数またはクラスの定義の外で初期化できます。クラス定義内で静的変数を初期化することもできます。
次の例は、静的変数の使用法を示しています。
例
システムを使用する;
名前空間 StaticVarApplication
{ クラス StaticVar { public static int num; public void count() { num++; } public int getNum() { return num; } } class StaticTester { static void Main(string[] args) { StaticVar s1 = new StaticVar(); StaticVar s2 = 新しい StaticVar(); s1.count(); s1.count(); s1.count(); s2.count(); s2.count(); s2.count(); Console.WriteLine("s1 的变量 num: {0}", s1.getNum()); Console.WriteLine("s2 的变量 num: {0}", s2.getNum());
Console.ReadKey();
} }
}
上記のコードをコンパイルして実行すると、次の結果が生成されます。
s1 的变量 num: 6
s2 的变量 num: 6
メンバー関数をstatic として 宣言することもできます 。このような関数は、静的変数にのみアクセスできます。オブジェクトが作成される前に静的関数が存在します。次の例は、静的関数の使用法を示しています。
例
システムを使用する;
名前空間 StaticVarApplication
{ クラス StaticVar { public static int num; public void count() { num++; } public static int getNum() { return num; } } class StaticTester { static void Main(string[] args) { StaticVar s = new StaticVar(); s.count(); s.count(); s.count(); Console.WriteLine("变量 num: {0}", StaticVar.getNum()); Console.ReadKey(); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます。
变量 num: 3