はじめてのC#【 06_プロパティ】

##    はじめに

  __<font color="blue">　【C#(シーシャープ)】</font>__ はMicrosoft社が開発した
　　　プログラミング言語で、C++やJavaに似た構文を持ち
　　　.NET Framework上で稼働するWindowsアプリの開発や
　　　Webアプリケーション開発のためのフレームワークである
　　　ASP.NETが使用可能なプログラム言語です。

##### このメモは、C#の基本的な記載方法のまとめです。

--------------------------------------------------------------

## 前回

https://qiita.com/nano357/items/b790b4c0cfbabccb1764


------------------------------------------------

## <font color="green">プロパティ</font>
#### メンバ変数の値の取得や変更を行うためのメソッド

 ##### 「人」を表す Person クラス
```C#
public class Person
{
    // フィールド
    private int age;
    private string name;

    /* 
      ageとnameはプライベートフィールドとして定義
       ⇒ クラスの外部から直接アクセス出来ない。
    */

    // 引数なしのコンストラクタ
    public Person()
    {
        Age = 0;         // 初期化された年齢
        Name = "未設定"; // 初期化された名前
    }

    // 引数ありのコンストラクタ
    public Person(int initialAge, string initialName)
    {
        Age = initialAge;   // 渡された値で年齢を初期化
        Name = initialName; // 渡された値で名前を初期化
    }

    /* 
      プロパティ
      getアクセサ(getter)でフィールドの値を取得し、
      setアクセサ(setter)でフィールドの値を設定します。
        ⇒ valueというキーワードが設定される値を表す。
    */

    //Ageのプロパティ
    public int Age
    {
        get { return age; }        // 年齢を取得
        set { age = value; }       // 年齢を設定
    }

    //nameのプロパティ
    public string Name
    {
        get { return name; }       // 名前を取得
        set { name = value; }      // 名前を設定
    }
}
````


 ##### クラスから実際に作り出したインスタンス
```C#

public class PersonTest
{
    public static void Main(string[] args)
    {
        // 引数なしコンストラクタを使用してインスタンス化
        Person man = new Person();

        // 初期化された年齢と名前を表示
        Console.WriteLine("初期化された年齢は " + man.Age);
        Console.WriteLine("初期化された名前は " + man.Name);

        // プロパティを使用して値を変更
        man.Age = 27;
        man.Name = "真太郎";

        // 変更後の年齢と名前を表示
        Console.WriteLine("年齢は " + man.Age);
        Console.WriteLine("名前は " + man.Name);

        // 引数ありのコンストラクタを使用してインスタンス化
        Person woman = new Person(28, "姫");

        // 年齢と名前を表示
        Console.WriteLine("年齢は " + woman.Age);
        Console.WriteLine("名前は " + woman.Name);
    }
}
````

 #####  自動実装のプロパティ ※1

```C#
using System;

public class Person
{
    // 自動実装プロパティ
    public int Age { get; set; }       // 年齢プロパティ
    public string Name { get; set; }   // 名前プロパティ

    // 引数なしのコンストラクタ
    public Person()
    {
        Age = 0;         // デフォルト値の設定
        Name = "未設定"; // デフォルト値の設定
    }

    // 引数ありのコンストラクタ
    public Person(int initialAge, string initialName)
    {
        Age = initialAge;   // 引数で設定された値
        Name = initialName; // 引数で設定された値
    }
}

public class PersonTest
{
    public static void Main(string[] args)
    {
        // 引数なしコンストラクタでインスタンス化
        Person man = new Person();

        // 初期化された年齢と名前を表示
        Console.WriteLine("初期化された年齢は " + man.Age);
        Console.WriteLine("初期化された名前は " + man.Name);

        // プロパティを使用して値を変更
        man.Age = 27;
        man.Name = "真太郎";

        // 変更後の年齢と名前を表示
        Console.WriteLine("年齢は " + man.Age);
        Console.WriteLine("名前は " + man.Name);

        // 引数ありのコンストラクタでインスタンス化
        Person woman = new Person(28, "姫");

        // 年齢と名前を表示
        Console.WriteLine("年齢は " + woman.Age);
        Console.WriteLine("名前は " + woman.Name);
    }
}
````


 #####  実行結果（プロパティ、自動実装のプロパティ　いずれも同じ）

````
初期化された年齢は 0
初期化された名前は 未設定
年齢は 27
名前は 真太郎
年齢は 28
名前は 姫
````


 ##### ※1
[C# プロパティ（setter/getter）の書き方と使い方](https://qiita.com/No2DGameNoLife/items/2c42337d41db5d6b176d)


--------------------------------------------------------------

## 次回

https://qiita.com/nano357/items/3029d1dbb8ded767e321

--------------------------------------------------------------
## 参考文献

C#関連情報サイト様

https://ufcpp.net/study/csharp/oo_property.html#level

https://itthestudy.com/c-sharp-property/


--------------------------------------------------------------