C#での開発をする上での基礎・基本であるクラスについてのメモ

C#で開発をする上での基礎中の基礎である、クラスについて学んだことをまとめた。

## クラスとは？
クラスとは、様々な変数(プロパティ)をまとめたもの。

### クラスの書き方
(例)
・会員ID(Id)
・会員名の名前(FirstName)
・会員名の名字(LastName)
・年齢(Age)
・誕生年(BirthYear)
・誕生月(BirthMonth)
・誕生日(BirthDay)
という値がまとまった会員クラスを作りたい場合、

~~~csharp
public class Member {
   public int Id { get; set; }  // 会員ID
   public string FirstName { get; set; }  // 会員名の名前
   public string LastName { get; set; }  // 会員名の名字
   public int Age { get; set; }  // 年齢
   public int BirthYear { get; set; }  //  誕生年
   public int BirthMonth { get; set; }  //  誕生月
   public int BirthDay { get; set; }  //  誕生日
}
~~~
というように書く。
本来、日付などを登録する場合はDateTime型で年月日をまとめることが多いが、ここではあえて、以降の説明のために、年月日を分けて書くこととする。

publicはアクセス修飾子といい、publicはどこからでも参照できるということを明示する。
他には、private(クラスが定義されているファイル名だけで参照できる)などがある。

※
・クラス名とプロパティ名は頭文字を大文字にすること
・基本は「(アクセス修飾子) (型) (プロパティ名) { get; set; }」の公式で書くこと

### クラスの中には、メソッドを定義することができる
また、クラスの中に、プロパティを元にしたデータを取得したい場合にそのプロパティを組み合わせて値をつくることがメソッドを定義することで可能。

(例)
○誕生年・月・日から誕生日を生成するGetBirthDayメソッド
○名字と本名をつなぎ合わせて本名を生成するGetFullNameメソッド
を新しくMemberクラスに追加したい時、

~~~csharp
public class Member
    {
        public int Id { get; set; }  // 会員ID
        public string FirstName { get; set; }  // 会員名の名前
        public string LastName { get; set; }  // 会員名の名字
        public int Age { get; set; }  // 年齢
        public int BirthYear { get; set; }  //  誕生年
        public int BirthMonth { get; set; }  //  誕生月
        public int BirthDay { get; set; }  //  誕生日

        public DateTime BirthDate ()
        {
            return new DateTime(this.BirthYear, this.BirthMonth, this.BirthDay);
        }

        public string GetFullName()
        {
            return this.LastName + this.FirstName;
        }
    }
~~~

※「(アクセス修飾子) (型) (メソッド名)」の通りに書く

## コンストラクタ
クラスに沿ったデータの集まりをインスタンス(オブジェクト)といい、そのインスタンスを作るのに便利なのが、コンストラクタ。

### コンストラクタの書き方
コンストラクタはクラス内に、クラス名と同じ名称で書くこと。

(例)

~~~csharp
public class Member
    {
        public int Id { get; set; }  // 会員ID
        public string FirstName { get; set; }  // 会員名の名前
        public string LastName { get; set; }  // 会員名の名字
        public int Age { get; set; }  // 年齢
        public int BirthYear { get; set; }  //  誕生年
        public int BirthMonth { get; set; }  //  誕生月
        public int BirthDay { get; set; }  //  誕生日

        public Member(
            int id,
            string firstName,
            string LastName,
            int age,
            int BirthYear,
            int BirthMonth,
            int BirthDay
        ) {
            this.Id = id;
            this.FirstName = firstName;
            this.LastName = LastName;
            this.Age = age;
            this.BirthYear = BirthYear;
            this.BirthMonth = BirthMonth;
            this.BirthDay = BirthDay;
        }

        public DateTime BirthDate ()
        {
            return new DateTime(this.BirthYear, this.BirthMonth, this.BirthDay);
        }

        public string GetFullName()
        {
            return this.LastName + this.FirstName;
        }
    }
~~~

## クラスからインスタンスを作成する
インスタンスを作るには、new 演算子を使う。

(例)Memberクラスから、ジョルノ・ジョバァーナのインスタンスを作りたい場合、

~~~csharp
Member giorno = new Member(1, "ジョルノ", "ジョバーナ", 15, 1985, 4, 16);
もしくは、
var giorno = new Member(1, "ジョルノ", "ジョバーナ", 15, 1985, 4, 16);
~~~

※変数の方はクラス名もしくはvarで書くこと

## クラスの中のメソッドを使う
クラスの中にメソッドがあり、それを使いたい場合、
(例)Memberクラスの中に定義された、GetFullNameを使いたい場合、

~~~csharp
var name = giorno.GetFullName();
Console.WriteLine(name);
~~~

~~~csharp:出力
ジョルノ・ジョバーナ
~~~

new 演算子で作成したインスタンスの後に、メソッド名を書くことで使用できる。


## 参考文献
https://www.amazon.co.jp/gp/product/4774187585/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1

https://www.amazon.co.jp/%E6%96%B0%E3%83%BB%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A9%E3%81%AA%E3%81%A3%E3%81%A8%E3%81%8F-%E5%85%A5%E9%96%80-%E5%87%BA%E4%BA%95-%E7%A7%80%E8%A1%8C/dp/429710458X/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A9%E3%81%AA%E3%81%A3%E3%81%A8%E3%81%8FC%23&qid=1626698930&s=books&sr=1-1