スポンサーリンク
※サイト運営にサーバーは必須です※
~ ロリポップ! はコスパのよい初心者向けサーバーです~
コンストラクターとは
コンストラクターとは、クラスからインスタンスが生成された時に、最初に一度だけ呼び出されるメソッドのようなものです。
ただし、メソッドと違って、戻り値を指定する必要はありません(戻り値がないからといって、voidと書く必要もありません)
コンストラクターは以下のような形で書きます。
アクセス修飾子 名前 (引数) {
処理文;
}
コンストラクターは必ず、クラスと同一の名称を指定する必要があります。
クラスが呼び出された時に、コンストラクターに書かれて処理が最初に行われるという性質上、フィールドの値の初期化に使われることが多いです。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Constructor02 { class Program { static void Main(string[] args) { MyClass mc = new MyClass(); Console.WriteLine(mc._num); } } class MyClass { //フィールド public int _num; //コンストラクター public MyClass() { Console.WriteLine("コンストラクターが呼び出されました"); _num = 20; } } } |
実行結果
コンストラクターが呼び出されました
20
アクセス修飾子は基本的にpublicを指定してください(publicに指定しないと、クラスのインスタンス化ができなくなるため)
※ちなみに静的クラスではコンストラクターは使えません。
コンストラクターの特徴
コンストラクターはメソッドと基本的に変わりはありません
・オーバーロードの使用可能
・paramsキーワードの使用可能
・refキーワードの使用可能
・outキーワードの使用可能
もしも、コンストラクターを定義しなかった場合、デフォルトのコンストラクターが準備されます。
逆に、コンストラクターを自分で定義したら、デフォルトのコンストラクターは用意されません。
その結果、引数のあるコンストラクターを定義したクラスを呼び出す時、引数を何も渡さなかったら、デフォルトのコンストラクターがないのでエラーになります。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Constructor03 { class Program { static void Main(string[] args) { //エラー //MyClass mc = new MyClass(); MyClass mc = new MyClass(10); Console.WriteLine(mc._num); } } class MyClass { //フィールド public int _num; //コンストラクター public MyClass(int i) { _num =i; } } } |
実行結果
10
もしも、引数のないコンストラクターが必要な場合は、引数のないコンストラクターを定義してオーバーロードください。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Constructor04 { class Program { static void Main(string[] args) { MyClass mc = new MyClass(10); Console.WriteLine(mc._num); MyClass mc2 = new MyClass(); Console.WriteLine(mc2._num); } } class MyClass { //フィールド public int _num; //コンストラクター public MyClass() { _num = 0; } //コンストラクター public MyClass(int i) { _num = i; } } } |
実行結果
10
0
~ギャンブルに絶対儲かる必勝法があるのだろうか?~
私(サイト主)はこの疑問に対して非常に興味を持ち、プログラミングで検証してみました。
このサイトを応援してもいいかなと思う人はぜひとも購入を検討してみてください。