読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

C# 6 の新機能でプロパティの初期化をシンプルに書く

C# 6 の新機能のひとつに『自動プロパティの初期化を書けるようになった』というものがあります。従来 〜 新機能を簡単にまとめると以下の通りです。

  1. 従来のプロパティ実装ではコードが長くなりがち
  2. 自動プロパティを使うとコードは短くなるが、初期値を指定出来ない
  3. C# 6 の拡張を使うと、自動プロパティに初期値を指定出来るようになった

従来の書き方

自動プロパティを使わずにプロパティを書くと以下のようになります。

using System;

namespace OldWay
{
    public class Person
    {
        private string name;
        private int age;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var alice = new Person();
            alice.Name = "Alice";
            alice.Age = 10;
            Console.WriteLine($"{alice.Name} is {alice.Age} years old.");
        }
    }
}

実行結果は以下の通りです。

> OldWay.exe
Alice is 10 years old.

自動プロパティを使った書き方

自動プロパティを使うとコードが激的に短くなります。

using System;

namespace AutoProperty
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var alice = new Person();
            alice.Name = "Alice";
            alice.Age = 10;
            Console.WriteLine($"{alice.Name} is {alice.Age} years old.");
        }
    }
}

実行結果自体は代わりません。

> AutoProperty.exe
Alice is 10 years old.

自動プロパティに初期値を設定するサンプルコード

C# 6 の新機能を使うと自動プロパティに初期値を指定することが出来るようになります。サンプルコードは以下の通りです。

using System;

namespace AutoPropertyEnhancements
{
    public class Person
    {
        public string Name { get; set; } = "Bob";
        public int Age { get; set; } = 20;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var alice = new Person();
            alice.Name = "Alice";
            alice.Age = 10;
            Console.WriteLine($"{alice.Name} is {alice.Age} years old.");

            var bob = new Person();
            Console.WriteLine($"{bob.Name} is {bob.Age} years old.");
        }
    }
}

実行結果は以下の通りです。サンプルコードでは bob というインスタンスを生成した後、プロパティに値を代入していません。よって、初期値が使われていることが分かります。

> AutoPropertyEnhancements.exe
Alice is 10 years old.
Bob is 20 years old.