C#面向对象

37 阅读4分钟

封装

用程序语言来形容现实中的对象

类和对象

1.类就是模板,对象就是用模板生成的事物
2.用类生成的对象实际上一个地址
3.null关键字可以把地址覆盖,对象失去与关联的堆,则对象数据丢失

创建一个类和生成一个对象

//创建一个类
访问修饰符 class 类名      
{
    语句块
}
class student
{
    语句块
}
//---------------------------------
//生成对象
类名 对象名 = new 类名();

student s = new student();
变量类型
    值类型:里面存储真实的数值,一般放在栈上。例(整形,结构体)
    应用类型:里面存储地址,一般放在堆上。例(字符串,类)

成员变量和访问修饰符

1.成员变量可以为任意类型 例
    字符串类型
    整形
    枚举类型
    类类型
    数值类型
    结构体类型
2.查看成员变量的初始值用default(int),int可以改成别的类型,引用类型默认为null
3.怎么判断是不是成员变量,如果是名词就是成员变量,动词就是成员方法
    struct Position
    {

    }

    enum E_SexType
    {
        Man,
        Woman,
    }

    class Person
    {
       public string name;        //字符串类型
       public int age;            //整形
       public E_SexType sex;      //枚举类型
       public Person girgFriend;  //类类型
       public Person[] boyFriend; //数值类型
       public Position pos;       //结构体类型

    }
3.修饰符有3p,不写默认为private
    public :公共的,内部和外部都能访问和修改
    private :私有的,只有内部才能访问和修改
    protected :保护的,只有内部和子类才能访问和修改
    
 
    //实例化一个对象,并给对象年龄赋值
    Person p = new Person();
    p.age = 20;
    Console.WriteLine(p.age);

成员方法

1.成员方法声明,等于函数

2.成员方法用来表示对象的行为

    //成员方法的声明
    class Person
    {
        public string name;
        public int age;

        public void Run()
        {
            Console.WriteLine("{0} 正在跑", name);
        }
    }
    //成员方法的使用
    Person p = new Person();
    p.name = "张三";
    p.Run();

构造,析构,垃圾回收

构造函数
    1.构造函数 必须有一个,默认为无参构造,利用重载,可以定义多个,实例化对象的时候默认会调用一次
    2.构造函数作用,给成员变量赋初始值
    3.分类:有参构造和无参构造
    4.构造函数名要跟类名一样
    class Person
    {
        public string name;
        public int age;

        //无参构造函数
        public Person()
        {
        }
        //有参构造函数
        public Person(String name, int age)
        {
            this.name = name;
            this.age = age;
        }

        public void Run()
        {
            Console.WriteLine("{0} 正在跑", name);
        }
    }
this关键字
    1.this实际上是一个地址,是实例化对象的地址
    2.当变量同名时,默认会以靠自己最近的变量的值为用
    3.使用this关键字可以避免以最近的值为赋予
    4.this关键字可以直接调用成员变量的值,而不是局部变量的值
    
        public Person(String name,int age)
        {
            this.name = name;
            this.age = age;
        }
析构函数
    1.当引用类型的堆内存被回收时,会调用该函数
    2.析构函数名要跟类名一样
    3.前面要加~号
    
        ~Person()
         {
        }
垃圾回收
    1.垃圾回收简称 GC
    2.垃圾就是没有被任何对象或变量引用的数据
    3.堆(Heap) : 用来存储程序员写的引用类型的数据,由程序员来进行控制
    4.栈(steak) :用来存放值类型的数据,由系统进行控制
    5.垃圾回收过程
        先把有引用的对象或变量放在下一个内存区,然后再清理本内存
        

成员属性

前提 必须要在成员变量加privateprotected 修饰符,成员属性才有意义
1.作用:用于保护成员变量,为成员变量的获取和赋值进行限定
   class Person
    {
        private string name;
        private int age;
        //成员属性1
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        //成员属性2
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                age = value;
            }
        }
    }
2.get和set前面可以加修饰符,只能给其中的一个加,get是获取成员变量的值,set是设置成员变量的值
        //用构造函数给成员变量赋值
        Person p = new Person();
        p.Name = "张三";
        Console.WriteLine(p.Name);
3.value可以获取 等号(=) 后面的值,再把值赋值给成员变量
4.加get意味着外部可以获取成员变量的值,不加则不能,加set可以在外部设置成员属性的值,不加则不能设置
5.可以通过限定条件来决定需不需要赋值或返回值