//2.类
        //[public] class 类名
        //{
        //    字段; 
        //    属性;
        //    方法;
        //}
 //我们管(通过类来)创建类的对象过程称为类的实例化
         // 使用new关键字
            //类不会被程序执行 因为代码只有写在main方法中才会被执行
            //所以应该要在main方法中创建类的对象
            //类是不占内存的,而对象是占内存的。
//创建Person类对象
            //class System.String  System这个项目中的String类
            //class _01.面向对象.Person  _01.面向对象这个项目中的Person类
            //自定义类:自己写的类,不是系统提供我们的类 
            //类是不占内存的,而对象是占内存的。 
//你给属性赋值 实际上就是给属性所对应的字段赋值/ 你输出属性的值 实际上输出的是属性所对应的字段值
 //表面上你给属性赋值实际上是给属性对应的字段赋值
            //表面上你输出属性值实际上输出的是属性对应的字段值
            //属性就相当于一个????里面有给字段赋值 和输出字段值的功能
            //他会自动的识别出你在干什么进而执行相应的功能 当你要输出属性时他就会将这个属性所对应的字段输出
            //当你要给属性赋值时 他就会把你给属性赋的值 赋给这个属性所对应的字段
            //属性不能存值 它对应的字段存值
            //输出属性值时实际上输出的是他所对应的字段值 
            get//取值  
            {
                //当你输出属性的值时会执行get方法
                return _name;
            }
            //当你给属性赋值时会执行set方法
            set//赋值
            {
                _name = value;
                // person2.Name = "abcd";
                //value为 你给Name属性赋的值 即也就是"abcd"
            }
            //要给当前对象的字段赋值时 (赋值时)调用set方法
            //要使用当前对象字段的值时 (取值时)调用get方法
            //给对象的字段赋值时 不要直接给字段赋值了
            //而是应该通过属性来为字段赋值 因为我们可以通过属性中的两个方法来对字段的取值和赋值进行限定 避免了直接将错误的值直接赋值给字段  
            //比如年龄赋的值为-1 这时我们可以通过使用属性中的set方法对你所付的值做一些处理 避免了直接将错误的值直接赋给字段 
            //我们虽然给对象中的属性赋值 但实际上最后还是将数值赋值给了字段
//当你用对象调用属性时系统会自动判断你在干什么然后相应的使用属性中方法
            //实际上的get/set方法
            //value是你给属性赋的值
            //属性是不存值的
            //你给属性赋的值 实际上你是把这个值作为属性中 set方法的参数传进了set方法里
            //然后set方法中有专门为字段赋值的语句 将你的值赋值给了字段
            //表面上是给属性赋值 实际上是调用了set方法将你的值作为方法参数 传到方法的里面
            //然后set方法中有专门为字段赋值的语句 将你的值赋值给了字段
            //属性是没有值的所以也不能被输出  你看到的输出属性值
            //实际上在输出属性时调用了属性中的get方法将该属性的字段以方法的返回值形式返回
            //这样才有可以输出的值输出  
            
           // 最终会把将这个值赋值给字段
        //public void set_Name(string value)
        //{
        //    this._name = value;
        //}
        //public string get_Name() 
        //{
        //    return this._name;
        //}
         }
        private int _age;
        /// <summary>
        /// 通过Age属性对字段的取值和赋值进行限定
        /// </summary>
        public int Age
        {
            //当我们用属性去赋值/输出属性的值时 会执行Age属性中的get方法 
            get
            {
                return this._age;
            }
            //当给Age属性赋值的时候会执行Age属性中的set方法 
            //value的值 为你给Age属性所赋的值
            set
            {
                if (value < 0 || value > 100)
                {
                    value = 0;
                }
                this._age = value;
            }
        }
        //c#语言中,定义在类中的变量被称为字段,字段有默认初始值,定义在方法中的变量成为局部变量.同一个类中在某一个方法中定义的局部变量与在类中定义的字段名同名.这种情况是允许的,此时方法中通过变量名访问到的是局部变量而并非是字段 
//如何在项目中添加类
        //c#中的 解决方案相当于Java中的工程 在解决方案中添加项目相当于在工程中添加包
        //       项目中存放着类相当于Java中的包与Java不同的是在新建项目的同时会自动的在项目添加一个名叫 Program的类 而Java在工程中创建包的时候不会自动的在包中创建一个类
        //如何给当前的项目添加类选中当前你要添加类的项目 右键添加里面有一个类 点击
        //或者选择新建项在新建项里面添加类
        //类都是以 .cs结尾的 xxx.cs 添加的名称即使结尾不加.cs 点击添加后也会默认给你添加上
        //在类中可以通过字段去描述有什么
        //昵称 年龄 体重 品种
        //通过方法去限定能过做什么(成员方法)
	    //跑动和吃东西
        //3、属性 写在类当中 正常情况下应该为每一个字段都配备一个属性 
            //属性的作用就是保护字段、对字段的赋值和取值进行限定。
        //在属性中的set方法里面对字段的赋值进行限定
        //在属性中的get方法里面对字段的取值进行限定。这个取值是指字段值的使用 的意思
        //也就是说在get方法里面对 字段值的使用进行了限制(比如当字段值不满足某些情况时 就返回另一个值 去输出)
            //属性的本质就是两个方法,一个叫get()一个叫set()。 set方法负责控制赋值 get方法负责控制取值
            //通过这样的两个方法来对字段的取值和赋值进行保护
        //
            //既有get()也有set()我们诚之为可读可写属性。
            //只有get()没有set()我们称之为只读属性
            //没有get()只有set()我们称之为只写属性
        //利用反编译器来查看微软的源代码是怎样写的
        //在点击生成项目后(编译后)会在文件资源管理器中 bin下的Debug目录下产生一个可执行的.exe文件 双击可以运行程序 将这个程序拖到反编译器中
        // Fields 字段
        // Methods 方法
        // Properties 属性
        //private:私有的,只能在当前类的内部进行访问,出了这个类就访问不到了。
        //private是访问权限最小的访问修饰符
        //被private访问修饰符修饰的成员只要离开当前定义他的类就不允许被访问了
        //类(class)或结构(struct)如果不是在其它类或结构中的话,它的访问类型要不就是internal, 要不就是public;
//换句话说,如果它在其它类或结构中的话,则可以为private 或protected等。下面说的类和结构,如无特殊说明,均指非"类中类"
//类或结构的默认访问类型是internal.
//类中所有的成员,默认均为private。
// 接口默认访问符是internal
//接口的成员默认访问修饰符是public,也不可能是其他访问修饰符
//命名空间,枚举类型成员默认public,也不可能是其他访问修饰符
//委托,默认internal
//在命名空间内部或编译单元顶部的所有类型,默认是internal,可以人为改为public。
//属行中既有get()方法也有set()方法  我们称该属性为可读可写属性。
        //属行中只有get()方法没有set()方法  我们称该属性为只读属性
        //属行中没有get()方法只有set()方法  我们称该属性为只写属性
        //我们在set方法中通过判断value的值   来给属性对应的字段进行赋值(在set方法中判断的是value)
        //我们在get方法中通过判断字段的值 来用return返回不同的值(在get方法中判断的是字段的值)
来源:https://www.cnblogs.com/zsupreme/p/12526551.html