.Net 视频学习第2季 C#面向对象
面向对象 基础
类是一个模板,不占内存,对象是根据模板生成的具象,占内存。
字段field:数据 方法method:函数 属性property:保护字段,对字段的赋值进行限定(将这部分封装在类中,外界不用理会如何实现)属性的本质就是两个方法 get() / set()
外部(甚至类内部的方法)通过属性对字段进行赋值/读取,get()/set()内部会进行限定,字段永远用private,属性才是public的。
namespace Proj { class Person { private int _age; public int Age {
get { return _age; } set { if (value < 0) { value = 0; } _age = value; } } } }
不写字段,只写属性是可以的,编译器会自动生成与属性对应的字段。写好字段后按ctrl+R+E可以生成对应属性。
创建类的对象(实例化)的关键字 new
非静态=实例,非静态类可以有静态成员,也可以有非静态成员,静态成员用类名调用(例如Console.WriteLine();),非静态成员用类的对象来调用。静态类只能有静态成员。注意成员包括字段、属性和方法。
所以对于一个静态的字段/属性,在非静态方法中用this也是访问不到的,但是是可以访问的(用类名来调用)。反过来,静态方法中是不能使用非静态成员的。
静态类中只允许静态成员,不可以实例化。
静态类在整个项目中是资源共享的,在内存中是独立于堆和栈的。
关于构造函数,和C++差异不大,有默认构造函数(无参),自己写了构造函数之后,默认的就不再存在,构造函数可以重载,没有返回值(连void都没有),构造函数的名字与类名一样,必须是public的。
(非静态)方法中指向(调用该方法的)对象的关键字 this
另外构造方法调用全参的构造函数也用到this
public Student(string name, int age, char gender, int chinese, int math) { this.Name = name; this.Age = age; this.Genger = gender; this.Chinese = chinese; this.Math = math; } public Student(string name, char gender, int math):this(name,0,gender,0,math) {}
当调用第二个构造方法时,实际上调用了第一个(全参)的构造方法,没有赋值的参数用默认值传入全参构造方法中。(减少由于不同参数对应的构造方法造成的冗余代码)