C# クラス
クラスを定義するときは、データ型のブループリントを定義します。これは実際にはデータを定義しませんが、クラスの名前が何を意味するか、つまりクラスのオブジェクトが何で構成されているか、およびこのオブジェクトに対してどのような操作を実行できるかを定義します。オブジェクトはクラスのインスタンスです。クラスを構成するメソッドと変数は、クラスのメンバーになります。
クラス定義
クラスの定義はキーワードclassで始まり、その後にクラス名が続きます。クラスの本体。中括弧で囲みます。以下はクラス定義の一般的な形式です:
<access specifier> class class_name { // member variables <access specifier> <data type> variable1; <access specifier> <data type> variable2; ... <access specifier> <data type> variableN; // member methods <access specifier> <return type> method1(parameter_list) { // method body } <access specifier> <return type> method2(parameter_list) { // method body } ... <access specifier> <return type> methodN(parameter_list) { // method body } }
注意してください:
アクセス識別子 <アクセス指定子> は、クラスとそのメンバーのアクセス ルールを指定します。指定しない場合は、デフォルトのアクセス識別子が使用されます。クラスのデフォルトのアクセス識別子はinternal、メンバーのデフォルトのアクセス識別子はprivateです。
データ型 は変数の型を指定し、戻り値の型
は返されるメソッドによって返されるデータ型を指定します。 クラスのメンバーにアクセスしたい場合は、ドット (.) 演算子を使用します。
ドット演算子は、オブジェクトの名前とメンバーの名前をリンクします。
次の例は、これまで説明した概念を示しています:
using System; namespace BoxApplication { class Box { public double length; // 长度 public double breadth; // 宽度 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; // 体积 // 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
メンバー関数とカプセル化
クラスのメンバー関数は A です。関数には、他の変数と同様に、クラス定義内にその定義またはプロトタイプがあります。クラスのメンバーとして、そのクラスの任意のオブジェクトを操作でき、オブジェクトのクラスのすべてのメンバーにアクセスできます。
メンバー変数は (設計の観点からは) オブジェクトのプロパティであり、カプセル化を実現するためにプライベートに保たれます。これらの変数には、パブリック メンバー関数を使用してのみアクセスできます。
上記の概念を使用して、クラス内のさまざまなクラス メンバーの値を設定および取得してみましょう:
using System; namespace BoxApplication { class Box { private double length; // 长度 private double breadth; // 宽度 private double height; // 高度 public void setLength( double len ) { length = len; } public void setBreadth( double bre ) { breadth = bre; } public void setHeight( double hei ) { height = hei; } public double getVolume() { return length * breadth * height; } } class Boxtester { static void Main(string[] args) { Box Box1 = new Box(); // 声明 Box1,类型为 Box Box Box2 = new Box(); // 声明 Box2,类型为 Box double 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 ) { length = len; } public double getLength() { return length; } 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("对象已创建,length = {0}", len); length = len; } public void setLength( double len ) { length = len; } public double getLength() { return length; } static void Main(string[] args) { Line line = new Line(10.0); Console.WriteLine("线条的长度: {0}", line.getLength()); // 设置线条长度 line.setLength(6.0); Console.WriteLine("线条的长度: {0}", line.getLength()); Console.ReadKey(); } } }上記のコードがコンパイルされて実行されると、次の結果が生成されます:
对象已创建,length = 10 线条的长度: 10 线条的长度: 6C# 関数の破壊クラスの
デストラクター
は、クラスのオブジェクトがスコープ外になったときに実行されるクラスの特別なメンバー関数です。デストラクターの名前には、クラス名の前にチルダ (~) が付けられます。値は返されず、パラメーターも受け取りません。
デストラクターは、プログラムを終了する前にリソースを解放するために使用されます (ファイルを閉じる、メモリを解放するなど)。デストラクターは継承またはオーバーロードできません。 次の例は、デストラクターの概念を示しています:using System; namespace LineApplication { class Line { private double length; // 线条的长度 public Line() // 构造函数 { Console.WriteLine("对象已创建"); } ~Line() //析构函数 { Console.WriteLine("对象已删除"); } public void setLength( double len ) { length = len; } public double getLength() { return length; } static void Main(string[] args) { Line line = new Line(); // 设置线条长度 line.setLength(6.0); Console.WriteLine("线条的长度: {0}", line.getLength()); } } }
上記のコードをコンパイルして実行すると、次の結果が生成されます:
对象已创建 线条的长度: 6 对象已删除
C# クラスの静的メンバー
static キーワードを使用して、クラス メンバーを静的として定義できます。クラス メンバーを静的として宣言すると、クラスのオブジェクトがいくつ作成されても、静的メンバーのコピーは 1 つだけ存在することになります。
キーワード static は、クラス内にこのメンバーのインスタンスが 1 つだけ存在することを意味します。静的変数は、クラスのインスタンスを作成せずにクラスを直接呼び出すことで値を取得できるため、定数の定義に使用されます。静的変数は、メンバー関数またはクラス定義の外部で初期化できます。クラス定義内で静的変数を初期化することもできます。
次の例は、静的変数の使用法を示しています:
using System; namespace StaticVarApplication { class 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 = new 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として宣言することもできます。このような関数は静的変数にのみアクセスできます。静的関数はオブジェクトが作成される前に存在します。次の例は、静的関数の使用法を示しています:
using System; namespace StaticVarApplication { class 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