はじめてのC#【 05_クラス】

##    はじめに

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

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

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

## 前回

https://qiita.com/nano357/items/550e552d0c53c0782a05



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

## <font color="green">クラスとインスタンス</font>
#### クラスは設計図、実体化したものをインスタンスといいます。

```C#
public class Person
{
//Person という名前のクラス


    /* 
      フィールドの宣言
        ⇒ クラスが持つ情報（データを格納する変数）
    */
    private string name; // 人の名前を表すフィールド


    /*
      メソッド
        ⇒ クラスが持つ機能（処理、命令文のまとまり）

      コンストラクタ
        ⇒ インスタンスが作成されたときに、
           自動的に呼び出されるメソッド
    */


    // コンストラクタの宣言
    public Person()
    {
        name = "仮太郎"; // 名前を初期設定する
    }


    //名前を設定するメソッド
    public void SetName(string newName)
    {
        name = newName; // 名前を更新する機能
    }

    //名前を取得するメソッド
    public string GetName()
    {
        return name; // フィールドの名前を返す
    }

}
````


 ##### クラスから実際に作り出したインスタンス
```C#
public class PersonTest
{
    public static void Main(string[] args)
    {
        //インスタンス化
        Person man = new Person();

        // 変更前の名前を表示
        Console.WriteLine("初期化された名前は " + man.GetName());
        
        //メソッドを使用して値を変更
        man.SetName("真太郎");

        // 変更後の名前を表示
        Console.WriteLine("名前は " + man.GetName());

    }
}
````

 #####  実行結果
````
初期化された名前は 仮太郎
名前は 真太郎
````


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


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

#### 引数ありのコンストラクタ


 ##### 「人」を表す Person クラス
```C#
public class Person
{
    // フィールド（Personクラスが持つデータを格納）
    private int age;     // 人の年齢を表すフィールド
    private string name; // 人の名前を表すフィールド
    /* アクセス修飾子 を　privateにすることで
       ※ 自分のクラスの内部からのみ参照可能 */

    /* 引数なしコンストラクタ
       インスタンスが作成されたときに、
       年齢を0、名前を"未設定"に初期化する */
    public Person()
    {
        age = 0;        // 初期化された年齢
        name = "未設定"; // 初期化された名前
    }

    /* 引数ありコンストラクタ
       インスタンスが作成される際に、
       指定された年齢と名前で初期化する */
    public Person(int initialAge, string initialName)
    {
        age = initialAge;  // 渡された値で年齢を初期化
        name = initialName; // 渡された値で名前を初期化
    }

    /* 年齢を設定するメソッド
       引数で渡された新しい年齢をフィールドに設定する */
    public void SetAge(int newAge)
    {
        age = newAge; // 年齢を更新
    }

    /* 名前を設定するメソッド
       引数で渡された新しい名前をフィールドに設定する */
    public void SetName(string newName)
    {
        name = newName; // 名前を更新
    }

    /* 年齢を取得するメソッド
       現在の年齢を返す */
    public int GetAge()
    {
        return age; // フィールドの年齢を返す
    }

    /* 名前を取得するメソッド
       現在の名前を返す */
    public string GetName()
    {
        return name; // フィールドの名前を返す
    }
}
````


 ##### クラスから実際に作り出したインスタンス
```C#
public class PersonTest
{
    public static void Main(string[] args)
    {
        /* 引数なしコンストラクタを使用してインスタンス化
           年齢0、名前"未設定"のPersonオブジェクトを作成 */
        Person man = new Person();

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

        /* setterメソッドを使用して値を変更
           年齢を27、名前を"真太郎"に設定 */
        man.SetAge(27);
        man.SetName("真太郎");

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

        /* 引数ありのコンストラクタを使用してインスタンス化
           年齢28、名前"姫"のPersonオブジェクトを作成 */
        Person woman = new Person(28, "姫");

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

````

 #####  実行結果

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

※1
[C# アクセス修飾子について](https://qiita.com/YouProgramer/items/b876a7f086ef19e2af86)

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

## 次回

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

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

C#関連情報サイト様

https://www.sejuku.net/blog/102559

https://ufcpp.net/study/csharp/oo_class.html


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