类和对象的学习1

using System;

namespace _20200406
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            /*类和对象
             * 面向对象:一种软件开发的思想,指导程序员如何分析、解决问题。
             * 类是一个抽象的概念,即为生活中的‘类别’。class
             * 对象是类的具体实例,即归属于某个类别的的‘个体’
             * 例如:学生是一个类,表示一种类型。‘八戒同学’就是一个对象
             * 名词类型的共性,作为数据成员
             * 动词类型的共性,作为方法成员
             * 创建类
             * 语法:
             * 访问界别  class 类名(大写首字母)
             * {
             *      类成员。。。。
             * }
             * 通常每个类都在一个独立的C#源文件中
             * 创建新的类意味着在当前项目中产生了一种新的数据类型,类似enum也是数据类型
             * 类是什么类型?引用类型
             * 
             * 创建对象
             * 语法:
             * 类名  引用名;
             * 引用名 = new 构造函数(参数列表);
             * 创建对象的过程也称为“实例化”
             */

            //声明Wife类型的引用,存的是谁谁的引用
            Wife wife01;//下面行设置断点,会发现此时wife01 是空,数据成员都是空
            //指向Wife类型的对象(实例化Wife类型对象),在堆上,创建多大的内存空间,取决于数据成员有多少
            wife01 = new Wife();
            wife01.SetName("米兰达");//下面行设置断点,才是wife01有了具体的地址,但是数据成员还是空
            wife01.SetAge(18);//开始设置成员数据,name和age中实际存储的是数据的引用,数据也在堆上
            //注意存的是引用,引用指向数据,存的永远都是引用
            //反过来理解就很好理解了,因为声明的时候不知道最终存储数据的大小,所以具体数据是另外存储在一个地方

            Wife wife02 = wife01;
            wife02.SetName("安吉丽娜");


            Console.WriteLine(wife01.GetName());
            Console.WriteLine( wife01.GetAge());
            Console.ReadLine();
            /*
             * 成员变量
             * 定义在类中-方法外的变量,因为是属于类的成员
             * 特点:
             * --具有默认值
             * --所在类被实例化后,存在堆中,对象被回收时,成员变量从堆中清除。
             * --可以与局部变量重名
             * 
             */
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace _20200406
{
    class Wife
    {
        //数据成员
        private string name;

        private string sex;

        private int age;

        //方法成员
        public void SetName(string name)
        {
            //this 这个对象(引用)
           //this  关键字可以直接找到这个类的成员变量
            this.name = name;
        }
        public string GetName()
        {
            return this.name;
        }
        public void SetAge(int age)
        {
            this.age = age;
        }
        public int GetAge()
        {
            return this.age;
        }
    }
}
    类和对象的学习1