C#属性
1.常规属性
先定义一个私有的字段,然后在为这个私有字段封装一个公开的属性,在属性中实现get和set两个方法,这种方式叫做常规属性。
当我们使用常规属性的时候,可以在get和set方法中,编写逻辑代码对取值和赋值的过程进行逻辑的校验。
2.自动属性
在某些情况下,属性的get和set只是完成字段的取值和赋值操作,而不包含任何附加的逻辑代码,这个时候可以使用自动属性。
例如:
public int Age{get;set;}
当我们使用自动属性的时候,就不需要再写对应的字段了,C#编译器会自动给我们的自动属性提供一个对应的字段。
注意:
在接口中使用属性,就要写自动属性的格式,因为接口中不支持字段。
虚方法、抽象类、接口语法对比
使用场景的对比
虚方法:父类中的个别方法用虚方法实现,然后允许子类在有需要的情况下重写这些虚方法。
抽象类:父类定义一系列的规范,子类去把父类里面定义的这些规范全部实现。
接口:是一种功能的扩展,是在原有的类的继承关系以外的新功能的扩展。
封装
五种访问修饰符
1.public[公开访问]
公开的访问权限。
当前类,子类,实例对象都可以访问到。
2.private[私有访问]
私有的访问权限。
只能在当前类内部进行访问使用;
子类,实例对象都访问不到。
3.protected[保护访问]
受保护的访问权限。
只能在当前类的内部,以及该类的子类中访问;实例对象访问不到。
4.internal[内部访问]
只能在当前程序集(项目)中访问。
在同一个项目中internal和public的访问权限是一样的。
5.protected internal[内部保护访问]
protected+internal的访问权限。
使用场合:
1.修饰类
能够修饰类的访问修饰符只有两个,public和internal;
类的默认访问修饰符是internal。
2.修饰类成员
五种访问修饰符都可以修饰类中的成员;
类中的成员默认访问修饰符是private。
静态
1.static关键字
用于修饰类,字段,属性,方法,构造方法等。
被static修饰的类称之为“静态类”;
被static修饰的成员称之为“静态成员”,
被修饰过的成员分别称为:静态字段,静态属性,静态方法,静态构造方法。
2.静态字段
静态字段不属于任何对象,只属于类,必须要用“类名.静态字段名”进行访问,通过“对象名.静态字段名”的方式是访问不到静态字段的。
静态字段可以重新赋值,类名.静态字段名=新的值;
静态字段存储的数据在内存中只有一份;(不属于对象,属于类)
实例(对象)字段在内存中会有N份,有多少对象就会有多少实例字段。
3.静态属性
用于对静态字段进行封装,并保证静态字段值的合法性;
静态属性使用“类名.静态属性名”进行访问。
静态属性不能用于封装非静态字段,因为静态的类成员是先于非静态的类成员存在的。在还没有对象之前,静态类成员就已经存在了且可以直接使用类名调用,而普通类成员需等创建对象后才存在。
4.静态、普通方法
直接使用“类名.静态方法名”进行访问。
控制台程序的Program入口类中的Main函数就是一个静态方法;
在静态方法中不能调用非静态方法。
static方法中想要调用非 static 方法,要先新创建一个对象,再有这个对象来调用非 static 方法。
5.静态构造方法
作用是用于初始化静态成员。
一个类只能有一个静态构造方法(唯一的、不能重载),该静态方法没有任何访问修饰符,也没有参数。可以定义在静态类中,也可以定义在非静态类中。
静态构造方法会在程序创建第一个实例或者引用任何静态成员之前完成类中静态成员的初始化。