Devろぐ

日々の開発作業で使用する知識やスキルのための備忘録です。 また、閲覧いただいた方からフィードバックをいただくことで、更なる技術向上を目指しています。

【C#】オブジェクト初期化子

今回はオブジェクトの宣言文に関する「初期化子」という機能を挙げる。
クラス等のメンバーを初期化する際、通常はコンストラクタ内での初期化または、
呼出側にてインスタンス化後に個別に初期化を行う方法が一般的である。

「初期化子」

例えば、オブジェクトの初期化を以下の「_Init()」内にて行うとする。

class ClassA
{
    public int Index;
    public string Name;
    public string Country;
    
    public ClassA()
    {
        Index = -1;
        Name = string.Empty;
        Country = string.Empty;
    }
}

private void _Init()
{
    ClassA person = new ClassA();
    person.Index = 1;
    person.Name = "tarou";
    person.Country = "japan";
}

このように記述し、オブジェクトの変数宣言~コンストラクタの呼出~インスタンス化~初期化処理
という流れが一般的な方法だと思う。
しかしこの場合、コンストラクタにて既定の初期化を行い、更に呼出側で初期化を行う事になる。
これを、「初期化子」を使い記述すると以下のようになる。

class ClassA
{
    public int Index;
    public string Name;
    public string Country;
    
    public ClassA()
    {
        Index = -1;
        Name = string.Empty;
        Country = string.Empty;
    }
}

private void _Init()
{
    ClassA person = new ClassA
    {
        Index = 1,
        Name = "tarou",
        Country = "japan"
    };
}

記述から見て取れると思うが、上記だと既定のコンストラクタの呼出を行わない。
その代わりに、{ }内の処理を実行するという物。

まとめ

私自身、呼出側でオブジェクトのインスタンス化をした後に1行1行初期化処理を記述していたり、
使いまわすものになると、異なる引数のコンストラクタを複数記述していたが、
「初期化子」を利用することで、初期化のステートメントが明示的にもなり、呼出側で初期化処理を自由に変更できるメリットがある。