.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. C#でプロパティの初期値を設定する方法とは?様々な方法を紹介!

C#でプロパティの初期値を設定する方法とは?様々な方法を紹介!

  • C#
  • プログラミング言語
公開日時:   更新日時:
C#でプロパティの初期値を設定する方法とは?様々な方法を紹介!
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>


    システム
    エンジニア
    C#でプロパティの初期値を設定するにはどうしたらいいのでしょうか?

    プロジェクト
    マネージャー
    コンストラクタから初期値を与える方法や、直接代入する方法があります。

    C#でプロパティの初期値を設定するために

    この記事では、クラスメンバの値を設定したり参照したりするときに使うプロパティの初期値の設定方法を紹介します。

    クラスやプロパティについて簡単に説明し、コンストラクタから初期値を与える方法と直接代入する方法の2点を紹介します。

    クラス・プロパティとは?

    この項では、後に誤解が生じないようにC#のクラスやクラスメンバ、そしてプロパティの利用方法について簡単に説明します。

    クラスとは?

    クラスは、したい処理群に対して様々な変数や関数をまとめて設計する機能です。インスタンスを用いて実体化できます。

    大体の場合、そのインスタンスからクラスの変数・関数を参照します。例えば、このように使います。以下のコードをC#で記述し、実行します。

    using System;
    using System.ComponentModel.DataAnnotations;

    public class Human // Humanクラスを定義
    {
    private string name;
    public Human() // コンストラクタを定義
    {
    name = "Jhon";
    }
    public void SayHello() // SayHello関数を定義
    {
    Console.WriteLine("Hello, {0}!", name);
    }
    }

    public class Program
    {
    static void Main()
    {
    Human human = new Human(); // クラスHumanからインスタンスを作成
    human.SayHello(); // インスタンスから関数を呼び出す
    }
    }

    [出力]
    Hello, Jhon!

    Humanクラスを定義し、Main関数内で
    Human human = new Human();
    とすることでHumanクラスからインスタンスを作成し、human変数に格納しています。最後に
    human.SayHello();
    とするとで、Humanクラス内で定義したSayHello()関数を呼び出しています。

    Humanクラスの定義では、public Human()から始まるコンストラクタを定義しています。これを使って、クラスのメンバnameを値"John"に初期化し、

    SayHello関数内の出力に利用しています。以下のコードをC#で記述し、実行します。

    プロパティとは?

    プロパティは、オブジェクト指向の3大要素の中で、クラスの必要な情報だけ利用できるようにする「カプセル化」概念を簡潔に実装するために存在するC#の機能です。

    プロパティを用いることで、「この変数はクラス外からは読み取りだけしたい」といった処理を簡潔に書くことが出来ます。

    例えば、このように使います。

    using System;
    using System.ComponentModel.DataAnnotations;

    public class Human // Humanクラスを定義
    {
    public string Name { get; private set; }
    public Human() // コンストラクタを定義
    {
    Name = "Jhon";
    }
    public void SayHello() // SayHello関数を定義
    {
    Console.WriteLine("Hello, {0}!", Name);
    }
    }

    public class Program
    {
    static void Main()
    {
    Human human = new Human(); // クラスHumanからインスタンスを作成
    human.SayHello(); // インスタンスから関数を呼び出す
    Console.WriteLine("human's name = {0}", human.Name); // インスタンス内の変数Nameを参照

    // コンパイルエラー setをプライベートにしているため外部から代入できない
    // human.Name = "Becky";
    }
    }

    [出力]
    Hello, Jhon!
    human's name = Jhon

    先ほどはname変数の定義を
    private string name;
    としていましたが、今回はプロパティを用いて
    public string Name{get; private set;}
    としています。最初のprivate string nameはprivate変数のため外部からの代入も参照もできません。

    それと違い、後者はプロパティでget; private set;としていることで「外部から参照はできるが代入はできない」という状態にできます。

    getが参照、setが代入でgetだけprivateを外しているのでこういったことになります。また、プロパティを持つpublic変数は慣例的に頭を大文字にします。覚えておきましょう。

    C#でプロパティの初期値を設定する方法を紹介!

    この項では、C#でプロパティの初期値を設定する方法を紹介します。

    プロパティ初期化子を用いた方法

    プロパティ初期化子を用いることで、簡潔にプロパティの初期化を行うことが出来ます。以下のコードをC#で記述し、実行します。

    using System;
    using System.ComponentModel.DataAnnotations;

    public class Human // Humanクラスを定義
    {
    public string Name { get; set; } = "田中"; // プロパティ初期化子を用いて初期化
    public void SayHello() // SayHello関数を定義
    {
    Console.WriteLine("Hello, {0}!", Name);
    }
    }

    public class Program
    {
    static void Main()
    {
    Human human = new Human(); // クラスHumanからインスタンスを作成
    human.SayHello(); // インスタンスから関数を呼び出す
    }
    }

    [出力] Hello, 田中!

    先ほどのプロパティの紹介ではコンストラクタを通じてプロパティの初期値を代入していましたが、プロパティ初期化子を用いてこのように記述することもできます。

    インスタンスごとにプロパティの初期値を変える必要が無い場合、このプロパティ初期化子を用いてプロパティの初期値を設定する方法が簡潔です。

    コンストラクタを用いた方法

    コンストラクタを用いることで、複雑な処理を内包する初期化を記述することが出来ます。以下のコードをC#で記述し、実行します。

    using System;
    using System.ComponentModel.DataAnnotations;

    public class Human // Humanクラスを定義
    {
    public string Name { get; set; }

    // 引数familyName(姓), firstName(名), isJapanese(日本人かどうか示すフラグ)
    // を持つコンストラクタの定義
    public Human(string familyName, string firstName, bool isJapanese)
    {
    if (isJapanese) // 日本人なら
    Name = familyName + " " + firstName; // 姓 + 名をフルネームとする
    else // それ以外なら
    Name = firstName + " " + familyName; // 名 + 姓をフルネームとする
    }

    public void SayHello() // SayHello関数を定義
    {
    Console.WriteLine("Hello, {0}!", Name);
    }
    }

    public class Program
    {
    static void Main()
    {
    Human humanA = new Human("鈴木", "一郎", true); // クラスHumanからインスタンスを作成
    Human humanB = new Human("Joestar", "Joseph", false);
    humanA.SayHello(); // インスタンスから関数を呼び出す
    humanB.SayHello();
    }
    }

    [出力]
    Hello, 鈴木 一郎!
    Hello, Joseph Joestar!

    このように、コンストラクタ内で引数を用いたプロパティの初期値の設定処理を行いたいときはコンストラクタからの初期化を行います。

    今回の例では、日本人であれば姓 + 名、そうでなければ名 + 姓をNameの初期値とするコンストラクタを作成しています。

    システム
    エンジニア
    プロパティ初期化子やコンストラクタを用いた方法でプロパティを初期化することができるのですね。

    プロジェクト
    マネージャー
    そうですね。プロパティの初期化を行うことで、クラスの可読性向上や処理の高速が見込めます。

    プロパティの初期化を使おう!

    この記事では、C#のプロパティの初期値を説明するため、最初にC#のクラスやプロパティについて簡単に説明しました。そしてそれらを前提知識としてC#のプロパティの初期値の設定方法をプロパティ初期化子とコンストラクタを用いた二つの方法で紹介しました。

    プロパティの初期化を上手くやることで、クラスの可読性の向上や処理の高速化につながります。したい処理にあった方法を心がけましょう。

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    C#新着案件New Job