1、virtual用于修饰方法、属性、索引器或者事件声明,并使它们可以在派生类中被重写。virtual不能与static、abstract、private或者override修饰符一起使用。
声明为virtual的方法被重写时,派生类中可以使用base关键字访问父类中的publid,protected成员。语法:base.member
但base关键字不能跳过类层次结构中的多个层次,子类不能访问祖父类的成员。base.base.member是非法的
2、override要扩展或者修改继承的方法、属性、索引器或事件的抽象实现或者虚拟实现,必须使用override修饰符。
不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。
3、static使用它声明属于类型本身而不是属于特定的对象的静态成员。static修饰符可以用于类、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。
下面的类声明为 static,并且只包含 static 方法:
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
常数或者类型声明隐式地是静态成员。
不能通过实例引用静态成员。 然而,可以通过类型名称引用它。 例如,请考虑以下类:
public class MyBaseC
{
public struct MyStruct
{
public static int x = 100;
}
}
若要引用静态成员 x,请使用完全限定名 MyBaseC.MyStruct.x,除非可从相同范围访问成员:
Console.WriteLine(MyBaseC.MyStruct.x);
尽管类的实例包含该类所有实例字段的单独副本,但每个静态字段只有一个副本。
不可以使用 this 来引用静态方法或属性访问器。
如果对类应用 static 关键字,则该类的所有成员都必须是静态的。
类和静态类可以有静态构造函数。 静态构造函数在程序开始和类实例化之间的某个时刻调用。
4、abstract 修饰符指示所修饰的内容缺少实现或未完全实现。 abstract 修饰符可用于类、方法、属性、索引器和事件。 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。