static 静态
可修饰类、类的构造函数,类的成员等;
[访问修饰符] static class 类名
{
//类的成员
}
static 静态函数构造名()
{
//语句
}
[访问修饰符] static 数据类型 数据成员
应用场景:类、类的构造函数或类的成员所引用或操作的信息与类有关,而与类的实例无关时
作用:
静态构造函数会自动调用,实现静态数据成员初始化
静态类不必实例化直接就可以调用静态成员,实现更简单,迅速
特点:
静态成员属于类,只能通过类来访问
静态数据成员不需要类实例化就已经分配内存空间
静态构造函数只调用一次
静态方法不能用代表当前实例的this关键字,也不能访问实例成员或调用实例方法
静态类不能实例化不能被继承
静态类仅包含静态成员
virtual 虚拟
可修饰方法,属性等,与覆盖override配合使用
[访问修饰符] virtual 返回值类型 方法名([参数列表])
{
//语句
}
[访问修饰符] virtual 数据类型 属性名
{
//属性体
应用场景:派生类需要重载从基类继承的方法和属性实现多态性
作用:
重载虚拟的基类成员,实现类多态性
根据对象所引用的实例,来自动调用覆盖前和覆盖后的方法
特点:
字段不能虚拟
使用sealed override(密封覆盖)可以停止虚拟继承
Override是覆盖不是替换,覆盖可调用覆盖前的方法
派生类可以不重载基类的虚方法
abstract 抽象
可修饰类,方法,属性等,派生类使用override重载
public abstract class 抽象类名
{
[访问修饰符] abstract 返回值类型 方法名([参数列表]);
}
public abstract 数据类型 属性名
{
get;
set;
}
应用场景:需要统一、规范派生类方法或属的声明格式
作用:
提供多个派生类可共享的基类的公共定义
抽象方法没有方法体,只用来让派生类重写
抽象属性不提供具体实现,只声明数据类型、名字、可访问性等,具体实现代码留给派生类
特点:
抽象类不能直接实例化
抽象成员必须在抽象类中声明,抽象类中可以有非抽象成员
抽象类不能是静态或密封的
抽象成员没有具体实现,派生类必须重载基类的抽象成员