c concepts constructor
このチュートリアルでは、コンストラクタ、デストラクタ、静的クラス、構造体、列挙型など、C#プログラミングの重要な概念のいくつかについて説明します。
オブジェクトとクラスに関する以前のチュートリアルの1つで、クラスとオブジェクトが何であるかを学びました。
オブジェクトは実際のオブジェクトに似ており、クラスは同様の種類のオブジェクトの論理的なコレクションです。これは、C#に存在する最も基本的なタイプの1つです。このチュートリアルでは、他の関連するC#の概念について詳しく説明します。
このチュートリアルでは、クラスのいくつかの重要な側面と、それらをプログラムで使用する方法について学習します。以前のチュートリアルで学んだ概念に基づいて、簡単なC#プログラムを作成しようとします。
学習内容:
C#のコンストラクターとは何ですか?
コンストラクターは、C#プログラミング言語の特殊なタイプのメソッドであり、指定されたクラスのオブジェクトが作成されるときに自動的に呼び出されるか呼び出されます。
その主な機能は、新しく作成されたオブジェクトのデータメンバーを初期化することです。コンストラクターの最も特徴的な機能の1つは、その名前です。クラスと同じ名前です。
コンストラクターは基本的に2つのタイプです。
- デフォルト
- パラメータ化
C#デフォルトコンストラクタ
名前が示すように、デフォルトのコンストラクターはクラスの基本コンストラクターです。引数はなく、オブジェクトの作成時に直接呼び出されます。
public class Program { public Program(){ Console.WriteLine('Constructor has been invoked'); } public static void Main(string() args) { Program p = new Program(); } }
次のプログラムの出力は次のようになります。
コンストラクターが呼び出されました
説明
クラス「Program」内にコンストラクタ「Program」を定義しました。これで、mainメソッド内でクラスを初期化すると、コンストラクターが自動的に呼び出されます。
したがって、コンストラクター内に保持しているコードスニペットはすべて呼び出されます。ここでは、コンストラクターの中括弧内に「コンストラクターが呼び出されました」というメッセージを出力しているため、クラスを初期化すると、デフォルトでコンストラクターが初期化され、メッセージが出力として出力されます。
パラメータ化されたコンストラクタ
名前が示すように、パラメーター化されたコンストラクターはパラメーターを持つコンストラクターです。これらのコンストラクターは、オブジェクトにさまざまな値を渡すために使用されます。
public class Details { public Details(int a, int b){ int c = a+b; Console.WriteLine('The sum is: '+ c); } } public class Program { public static void Main(string() args) { Details d = new Details(2, 3); } }
次のプログラムの出力は次のようになります。
データマイニングの決定木とは
合計は:5
説明
デフォルトのコンストラクターを使用した前の例では、同じクラスにmainメソッドがあります。この例では、別のクラスにmainメソッドがあります。
2つの整数値を受け入れるパラメーター化されたコンストラクターを含む「Details」という名前のクラスが1つあります。コンストラクター内で、整数の合計を出力しています。 mainメソッドを含む「Program」という別のクラスがあります。 mainメソッド内で、「Details」クラスを初期化しました。
前に説明したように、クラスが初期化されると、そのコンストラクターが自動的に呼び出されます。したがって、この場合、コンストラクターメソッド「Details」が呼び出され、初期化中にパラメーターを渡すと、出力が出力されます。
C#のデストラクタ
デストラクタはコンストラクタの正反対です。これは、クラスオブジェクトがスコープ外になったときに呼び出されるクラスの特別なメソッドです。コンストラクタと同様に、デストラクタ名もクラス名とまったく同じですが、接頭辞「〜」(チルダ)が付いています。
デストラクタはパラメータを受け入れず、値を返しません。デストラクタはクラスオブジェクトを破壊するため、主にプログラムの実行後にメモリを解放するために使用されます。デストラクタについて注意すべきもう1つの重要な点は、オーバーロードしたり、継承したりすることはできないということです。
デストラクタの例:
public class Program { public Program(){ Console.WriteLine('Constructor has been invoked'); } ~Program(){ Console.WriteLine('Destructor has been invoked'); } public static void Main(string() args) { Program p = new Program(); } }
次のプログラムの出力は次のようになります。
コンストラクターが呼び出されました
デストラクタが呼び出されました
説明
コンストラクターの学習に使用したのと同じ例を使用しました。プログラムクラス(〜Program)にデストラクタを追加しました。クラスのオブジェクトを初期化すると、コンストラクターが呼び出され、クラスのオブジェクトが作成されます。これにより、「コンストラクターが呼び出されました」というフレーズがコンソールに出力されます。
実行が完了し、クラスオブジェクトがスコープ外になると、プログラムはデストラクタに向かって移動します。次に、デストラクタが呼び出され、デストラクタがオブジェクトを破壊します。ここでは、デストラクタが呼び出された後にコンソールに出力されるメッセージをデストラクタ内に出力しました。
クラス内の静的メンバー
クラスのメンバーは、staticキーワードを使用して静的に宣言できます。オブジェクトが静的として宣言されると、作成されたオブジェクトの数に関係なく、静的オブジェクトのコピーは1つだけになります。
静的であるということは、特定のクラスに存在するメンバーのインスタンスが1つあることを意味します。これは、クラス内の静的関数または変数の値を、それらのオブジェクトを作成せずに呼び出すことができることを意味します。
静的変数は、定数のインスタンスを作成するのではなく、クラスを呼び出すことによって値を直接取得できるため、定数の宣言に使用されます。
例:
public class Details { public static void stat(){ Console.WriteLine('Static method invoked'); } } public class Program { public static void Main(string() args) { Details.stat(); } }
次のプログラムの出力は次のようになります。
呼び出された静的メソッド
説明
上記の例では、静的メソッド「stat」を含むクラス「Details」を作成しました。 mainメソッドを含む別のクラス「Program」があります。前のトピックでは、メソッドにアクセスするためにクラスを初期化する方法を見ました。ただし、前述したように、クラスの静的メンバーには、クラスオブジェクトの初期化を使用してアクセスできます。
したがって、mainメソッドでは、オブジェクトを作成せずに、クラスを使用してメソッドを直接呼び出しました。プログラムの出力は、静的メソッド内に記述されたコードを実行しました。この場合、コンソールにメッセージを出力しました。
vbスクリプトインタビューの質問と回答
C#の静的クラス
静的クラスは、C#の通常のクラスに似ています。静的クラスは静的メンバーのみを持つことができ、インスタンス化することはできません。静的クラスは、クラスがインスタンス化されていないことを確認するために使用されます。静的クラスは、宣言中にキーワードクラスの前にキーワードstaticを使用して宣言されます。
例:
public static class Details { public static void multiply(int a, int b){ int c = a*b; Console.WriteLine('Multiplication result is: '+c); } } public class Program { public static void Main(string() args) { Details.multiply(2,8); } }
次のプログラムの出力は次のようになります。
乗算の結果は次のとおりです:16
説明
上記の例では、静的クラス「Details」を作成し、静的クラス内に別の静的メソッド「multiply」を作成しました。メソッド内には、実行するコードスニペットがいくつかあります。 mainメソッドを持つ別のクラス「Program」もあります。
mainメソッド内で、静的クラス内に存在するmultiplyメソッドを呼び出しました。 mainメソッドを見ると、静的クラスのオブジェクトが初期化または作成されておらず、代わりにmainメソッドからクラスが直接呼び出されていることがわかります。
したがって、クラス名を使用してパラメーターを指定することにより、multiplyメソッドを直接呼び出すと、コードが実行され、出力が出力されます。
C#の構造体
C#の値型エンティティは構造と呼ばれます。これは、ユーザーが複数の異なるデータ型の関連データを単一の変数に格納するのに役立ちます。前述のように、構造体は、フィールド、メソッド、コンストラクター、演算子、イベントなどを保持する値型エンティティです。構造体は、「struct」キーワードを使用して宣言されます。
構造体の機能:
- これには、定数、メソッド、プロパティ、インデックス、演算子、コンストラクターなどを含めることができます。
- デフォルトのコンストラクターを持つことはできません。
- インターフェイスを実装できますが、他の構造体やクラスと継承することはできません。
- 構造体は、使用するために新しいキーワードを使用して初期化する必要があります。
構造体とクラスの違い
StructとClassは、ある意味で互いに似ているように感じるかもしれませんが、いくつかの違いがあります。
違いは次のとおりです。
- 構造体は値型ですが、クラスは参照型です。
- 構造体を初期化するには、newキーワードが必要です。
- 構造体はパラメーター化されたコンストラクターのみを持つことができますが、クラスはデフォルトとパラメーター化されたコンストラクターの両方を持つことができます。
構造体:定義
構造体は、structキーワードを使用して定義できます。構造体は、プログラムのいくつかの異なるメンバーを使用して新しいデータ型を定義できます。
構造体は、オブジェクトの初期化と同様の方法で、つまりnewキーワードを使用して初期化できます。構造体は値型エンティティであるため、クラスオブジェクトよりも操作が高速です。データを保存する必要がある場合は常に、構造体を使用する必要があります。一方、データを転送する必要がある場合は、構造体よりもクラスを使用することをお勧めします。
例:
public struct Cuboid { public int length; public int width; public int height; } public class Program { public static void Main(string() args) { Cuboid cb = new Cuboid(); cb.length = 10; cb.width = 20; cb.height = 30; Console.WriteLine('The volume of cuboid is: {0}', (cb.length*cb.width*cb.height)); } }
次のプログラムの出力は次のようになります。
直方体の体積は次のとおりです:6000
説明
上記の例では、直方体の長さ、幅、高さのデータ型を格納する構造体直方体を定義しました。 mainメソッドがある別のクラスプログラムがあります。
mainメソッドでは、newキーワードを使用して「Cuboid」構造体を初期化します。次に、オブジェクトを使用して、構造体に格納されているデータ型を呼び出して値を割り当てました。次に、構造体から変数に対して操作を実行し、結果をコンソールに出力しました。
したがって、プロパティ、イベント、またはメソッドを使用する場合は、新しいキーワードを使用して構造体を初期化する必要があります。そうしないと、コンパイルエラーが発生します。
C#の列挙型
列挙型は整数定数のセットであり、構造体と同様に値型エンティティでもあります。これは主に、名前空間、クラス、さらには構造体内で「enum」キーワードを使用して整数のリストを宣言するために使用されます。列挙型では、それぞれの名前を使用してそれらを参照できるように、各整数定数に名前を付けます。
列挙型には、固定数の定数を含めることができます。安全性の向上に役立ち、トラバースすることもできます。
列挙型の機能
- 列挙型は、定数に意味のある名前を付けることにより、コードの可読性と保守性を向上させます。
- 列挙型は文字列型定数と一緒に使用することはできません。
- 列挙型には、int、long、short、byteなどの定数を含めることができます。
- デフォルトでは、列挙型定数の値はゼロから始まります
列挙型の宣言
列挙型を宣言するための構文を以下に示します。
enum { list of integer constants };
すべての列挙型定数にはデフォルト値があります。値は0から始まり、1つずつ上に移動します。
例:
public enum Cuboid{ length, width, height } public class Program { public static void Main(string() args) { int l = (int)Cuboid.length; int w = (int)Cuboid.width; int h = (int)Cuboid.height; Console.WriteLine('The length is :{0}”, l); Console.WriteLine('The width is :{0}”, w); Console.WriteLine('The height is :{0}”, h); } }
次のプログラムの出力は次のようになります。
長さは:0です
幅は:1です
高さは:2
説明
構造体で学んだ同様の例を使用しました。この例では、Cuboidという名前の列挙型を作成しました。この列挙型には、長さ、幅、高さの3つのメンバーが含まれています。
mainメソッドを含む別のクラスProgramがあります。列挙型変数を整数型に変換するために明示的なキャストが使用された後、それらの値をmainメソッド内のさまざまな変数に格納し、コンソールに出力しました。
デフォルトでは、最初の列挙型の値はゼロになり、2番目の列挙型の値は1になります。したがって、値を出力すると、前述の出力が返されます。
列挙型の値の変更
列挙型を使用すると、ユーザーはメンバーのデフォルトの開始インデックスを変更することもできます。変数の開始インデックスを変更すると、後続のメンバーの値が増分シーケンスで更新されます。
前の例で定義した列挙型の最初のメンバーに値を割り当てて、何が起こるかを見てみましょう。
public enum Cuboid { length = 10, width, height } public class Program { public static void Main(string() args) { int l = (int)Cuboid.length; int w = (int)Cuboid.width; int h = (int)Cuboid.height; Console.WriteLine('The length is :{0}”, l); Console.WriteLine('The width is :{0}”, w); Console.WriteLine('The height is :{0}”, h); } }
次のプログラムの出力は次のようになります。
長さは:10です
幅は:11
高さは:12です
説明
列挙型の最初のメンバーに値を割り当てると、列挙型の後続のすべてのメンバーにその値の増分が割り当てられます。定義したように、最初の値は10、次の値は11、次の値は12になります。
ユーザーは自分の選択に応じて任意の値を割り当てることができ、列挙型のすべてのメンバーは、ユーザー定義の値の増分で自動割り当てされます。
C#のプロパティ
C#のプロパティは、基本的に、インターフェイス、クラス、および構造体の名前付きメンバーです。プロパティは、構造体またはクラスのメンバー変数/メソッドの拡張です。これらは、プライベートフィールドの値の読み取り、書き込み、または変更に使用されます。
プロパティは、フィールドと同じようにアクセスされます。それらには、値の取得、設定、および計算に使用できるアクセサーがあります。プロパティに値を設定しながらロジックを配置することもできます。また、外部からのアクセスを制限するプライベートクラスと一緒に使用することもできますが、同時に、ユーザーはプロパティを使用して値を取得または設定できます。
アクセサーとは何ですか?
プロパティのアクセサは、特定のプロパティの読み取り、書き込み、または計算に使用できるステートメントを構成します。プロパティの宣言には、get、set、またはその両方を含めることができます。
例:
public class Cube { private int side; //Declare a Side property of type integer public int Side{ get{ return side; } set{ side = value; } } } public class Program { public static void Main(string() args) { Cube cb = new Cube(); cb.Side = 5; Console.WriteLine('The volume of cube is :{0}', (cb.Side * cb.Side* cb.Side)); } }
上記のコードスニペットが正常にコンパイルおよび実行されると、次の出力が表示されます。
立方体の体積は:125です
説明
上記の例では、整数型の「Side」プロパティを宣言したクラス「Cube」があります。その後、変数側に値を返し、提供したプロパティを取得して設定します。
.apkファイルを開く方法
mainメソッドを持つ別のクラス「Program」があり、その中でCubeクラスを初期化し、Sideプロパティの値を指定してから、計算結果をコンソールに出力しました。
結論
このチュートリアルでは、クラスのメンバー関数について学習しました。メンバー関数は、それが存在するクラスの任意のオブジェクトを操作できます。また、コンストラクタとデストラクタについても学びました。
コンストラクタはクラスオブジェクトの作成時に自動的に初期化されますが、デストラクタはクラスを破棄し、主に実行の完了後にメモリ割り当てを削除するために使用されます。コンストラクターには、デフォルトとパラメーター化の2つのタイプがあります。
デストラクタはパラメータを受け入れず、値も返しません。コンストラクタとデストラクタはどちらも、クラス名とまったく同じ名前を持っています。また、静的変数と静的クラス、およびクラスインスタンスを使用せずにそれらにアクセスする方法についても学びました。静的クラスは静的メンバーしか持てないことがわかりました。
また、構造体または構造体についても説明しました。構造体は値型エンティティであり、アクセスするには初期化する必要があります。
C#の列挙型とプロパティについても説明しました。列挙型は、名前付き整数定数のセットです。構造体と同様に、これも値型エンティティです。列挙型にはメンバーがあり、各メンバーには独自のデフォルト値があります。
最後に、構造体またはクラスのメンバー変数/メソッドの拡張であるプロパティについて説明しました。これらは、プライベートフィールドの値を取得、設定、または変更するために使用されます。
=> ここで完全なC#トレーニングシリーズを参照してください