Javaとの違いに注目しながらクラスを作ってみよう。

●Person.cs

using System;
namespace ClassLesson
{
    public class Person
    {
        private string name;
        private int age;

        //プロパティ
        public string Name
        {
            set
            {
                this.name = value;
            }
            get
            {
                return this.name;
            }

        }

        public int Age
        {
            set
            {
                this.age = value;
            }
            get
            {
                return this.age;
            }
        }
        public void ShowInfo()
        {
            Console.WriteLine($"名前:{this.name},年齢:{this.age}");
        }

    }
}

●Program.cs

using System;

namespace ClassLesson
{
    class Program
    {
        static void Main(string[] args)
        {
            //オブジェクト初期化子で初期化
            Person person = new Person()
            {
                Name = "山田",
                Age = 18
            };
            Console.WriteLine(person.Name);
            Console.WriteLine(++person.Age);
            person.ShowInfo();

        }
    }
}



プロパティにアクセス制限

using System;
namespace ClassLesson
{
    public class Person
    {
        private string name;
        private int age;

        //コンストラクタ
        public Person(string name){
            this.name = name;
        }

        public Person(string name, int age):this(name)
        {
            this.age = age;
        }

        //プロパティ
        public string Name
        {
            set
            {
                this.name = value;
            }
            get
            {
                return this.name;
            }

        }

        public int Age
        {
            //setterをprivateにする
            private set
            {
                this.age = value;
            }
            get
            {
                return this.age;
            }
        }
        public void AgePlus()
        {
            this.age++;
        }
        public void ShowInfo()
        {
            Console.WriteLine($"名前:{this.name},年齢:{this.age}");
        }


    }
}

using System;

namespace ClassLesson
{
    class Program
    {
        static void Main(string[] args)
        {
            //コンストラクタで初期化
            Person person = new Person("田中", 18);

            Console.WriteLine(person.Name);
            // person.Age++;
            person.AgePlus();
            Console.WriteLine(person.Age);

        }
    }
}

setter,getterで特にやる処理がない場合は自動プロパティが便利

using System;
namespace ClassLesson
{
    public class Person
    {
        //自動プロパティ
        public string Name { get; set; }
        //初期値も指定できる
        //public string Name { get; set; } = "ごんべ";
        public int Age { get; set; }
        public void ShowInfo()
        {
            Console.WriteLine($"名前:{this.Name},年齢:{this.Age}");
        }

    }
}