C#でクラスのフィールド宣言とコンストラクターでの初期化はどっちが優先する?
C#では、クラスからインスタンスを生成したときに自動的に呼び出されるコンストラクターというメソッドがあります。インスタンス生成時に自動的に呼び出されるので、インスタンスの初期化に使われます。では、フィールドの宣言と同時に初期値を設定しつつ、コンストラクターでもそのフィールドの初期値を設定した場合には、どちらが優先するのでしょうか。
目次
試してみた
簡単なコンソールアプリを作って試してみました。「ClassAというクラスのインスタンスを生成して、そのフィールドの値をコンソールに出力する。」という簡単なアプリです。 まず、コンストラクターで初期化をしない場合です。
using System;
namespace constructor_trial
{
class Program
{
static void Main(string[] args)
{
ClassA instanceA = new ClassA("コンストラクターで指定");
Console.WriteLine(instanceA.TextString);
}
}
}
namespace constructor_trial
{
class ClassA
{
public string TextString = "フィールド定義での初期値"; // フィールドを宣言する
public ClassA (string inputText) // コンストラクターを宣言する
{
// コンストラクターでは何もせず
}
}
}
出力は下図の様になります。クラスのフィールド宣言部分で設定した値が出力されましたね。 では、コンストラクターでこのフィールドの値を設定してみます。クラスClassAのコードだけ、下記のように変更しました。
namespace constructor_trial
{
class ClassA
{
public string TextString = "フィールド定義での初期値"; // フィールドを宣言する
public ClassA (string inputText) // コンストラクターを宣言する
{
TextString = inputText; // フィールドに引数の文字列を設定する
}
}
}
まとめ
フィールドの初期値は、宣言部に初期値の指定があればそれが初期値となり、もしコンストラクターにフィールドへの代入文があればそれが適用されます。宣言するときにフィールドのデフォルト値を設定しておいて、必要に応じてインスタンス生成時に初期値を設定することができるように使えそうです。
公開日
広告
C#カテゴリの投稿
- C#でMVVMって何でしょう
- C#でPDFを表示する(WPF)
- C#でアプリのログを記録してみる
- C#でアプリの設定を保存する
- C#でインスタンスをプログラムで作ってみた(Activator.CreateInstance編)
- C#でインスタンスをプログラムで作ってみた(Type.InvokeMember編)
- C#でインスタンス間のデータの受け渡しをしてみた
- C#でウェブサイトのソースを取得してみた
- C#でエラーの処理をする
- C#でクラスのフィールド宣言とコンストラクターでの初期化はどっちが優先する?
- C#でスタックを使って逆ポーランド記法の計算をしてみた
- C#で数式を中置記法から後置記法(逆ポーランド記法)に変換してみた(三角関数編)
- C#で選択(switch-case編)
- C#のWPFでデータバインディング
- C#のXAMLでメニューとステータスバーのレイアウトをしてみた
- C#のアプリの情報を表示してみた
- C#のクラスとインスタンスとオブジェクト
- C#の反復処理(foreach編)
- C#の命名規則
- C#へのMicrosoft.TeamFoundation.Controlsの参照の追加について