自動実装プロパティに初期値を設定するコードと実行結果

自動プロパティに初期値を設定するコードと実行結果を紹介します。

概要

こちらの記事では自動実装プロパティを利用した実装を紹介しました。 自動プロパティで初期値を設定したい場合があります。通常のプロパティであれば、コンストラクタで初期化するのが一般的ですが、 コンストラクタが無い場合など、初期化のためだけにコンストラクタを実装するのは大変なため、簡単に初期化のロジックを記述したい場合があります。 この記事では、自動プロパティに初期値を設定するコードを紹介します。

書式

自動プロパティで初期値を設定する場合には次の書式を利用します。

(アクセス識別子) (プロパティの型) (プロパティ名) {get; set;} = (初期値);

記述例

public string text {get;set;} = "None";

動作の確認

初期化の無い自動実装プロパティ

クラスを作成し、下記のコードを記述してコンパイルすると次の警告が出ます。

警告メッセージ
CS8618 : null 非許容のプロパティ 'プロパティ名' には、コンストラクターの終了時にnull 以外の値が入っていなければなりません。プロパティを Null 許容として宣言することをご検討ください。

英語では以下のメッセージになります。

Warning Message
CS8618 : Non-nullable property '<propertyname>' must contain a non-null value when exiting constructor. Consider declaring the property as nullable.


ワーニング解消のためには、コンストラクターでプロパティの初期化をするかNull許容型のプロパティに変更する必要があります。

MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InitAutoImplementedProperty
{
  public class MyClass
  {
    public string value1 { get; set; }
  }
}


自動実装プロパティに初期値を設定するコードと実行結果:画像1

コンストラクタでの自動実装プロパティの初期化

プロパティを初期化するため、従来の実装では次のコードのようにコンストラクターを実装します。
ワーニングは解消されますが、プロパティの初期化のためだけにコンストラクターを作成するのは、コードが増えあまり良くない場合もあります。

MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InitAutoImplementedProperty
{
  public class MyClass
  {
    public string value1 { get; set; }
    public MyClass()
    {
      value1 = "在庫";
    }
  }
}

自動実装プロパティに初期値を設定するコードと実行結果:画像2

自動実装プロパティの初期化の記述

自動実装プロパティの場合、先に紹介した書式で初期値を設定できます。
コードは次の通りになります。

MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InitAutoImplementedProperty
{
  public class MyClass
  {
    public string value1 { get; set; }
    public string value2 { get; } = "ぺんぎんクッキ-";
    public int value3 { get; set; } = 8;

    public MyClass()
    {
      value1 = "在庫";
    }
  }
}

自動実装プロパティに初期値を設定するコードと実行結果:画像3

すべてのプロパティに初期化を設定することで、コンストラクタの実装を不要にできます。

MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InitAutoImplementedProperty
{
  public class MyClass
  {
    public string value1 { get; set; } = "在庫";
    public string value2 { get; } = "ぺんぎんクッキ-";
    public int value3 { get; set; } = 8;
  }
}

自動実装プロパティに初期値を設定するコードと実行結果:画像4

プログラム例

UI

下図のフォームを作成します。ボタンとMultilineプロパティをtrueに設定した、複数行のテキストボックスを配置します。
自動実装プロパティに初期値を設定するコードと実行結果:画像5

コード

FormMain.cs
namespace InitAutoImplementedProperty
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      MyClass m = new MyClass();
      textBox1.Text += "Value1:" + m.value1 +"\r\n";
      textBox1.Text += "Value2:" + m.value2 + "\r\n";
      textBox1.Text += "Value3:" + m.value3.ToString() + "\r\n";
    }
  }
}

MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InitAutoImplementedProperty
{
  public class MyClass
  {
    public string value1 { get; set; } = "在庫";
    public string value2 { get; } = "ぺんぎんクッキ-";
    public int value3 { get; set; } = 8;
  }
}

解説

MyClassのプロパティを自動実装プロパティで記述し、それぞれのプロパティの初期値を設定しています。
フォームのボタンをクリックすると、MyClassのインスタンスを作成し、クラスのプロパティの値をテキストボックスに表示する動作になります。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。
自動実装プロパティに初期値を設定するコードと実行結果:画像6

[button1]をクリックします。テキストボックスにプロパティの値が表示されます。プロパティの初期値として設定した値が表示されることが確認できます。
自動実装プロパティに初期値を設定するコードと実行結果:画像7

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2021-10-28
Copyright © 1995–2025 iPentec all rights reserverd.