Sealed: 可以用于修饰类,方法和属性。表示密封的,隐式密封,不允许被继承.
· 密封类会重写父类,但本身不允许被重写和继承;
· Sealed方法和属性必须始终和override一起使用;
举例如下:
// cs_sealed_keyword.cs
using System;
sealed class SealedClass
{
public int x;
public int y;
}
class MainClass
{
static void Main()
{
SealedClass sc = new SealedClass();
sc.x = 110;
sc.y = 150;
Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
}
}
Abstract: 可以和类,方法,属性,索引器,事件一起使用。在类声明中使用abstract表明该类只能是其他类的基类,该类中的成员的只能在派生类中实现;标记为abstract的成员也只能在派生类中实现;abstract方法只允许在abstract类中声明,这样的方法默认是虚方法。
· 抽象类不能被实例化;
· 从抽象类派生的非抽象类必须实现抽象类的所有抽象方法和抽象访问器;
· 不能用Sealed修饰抽象类;
举例如下:
abstract class ShapesClass
{
abstract public int Area();
}
class Square : ShapesClass
{
int x, y;
// Not providing an Area method results
// in a compile-time error.
public override int Area()
{
return x * y;
}
}
Virtual: 用于修饰方法、属性、索引器或事件声明,允许派生类中重写这些方法。
Virtual不能和static, abstract, override, private一起使用。
Interface: 描述一组相关的功能体,这些功能体可以属于任何class或struct。Interface可以包含function, property, event, indexers; interface不可以包含field, interface的成员默认情况下是public的。
要在class实现interface的成员:
· 必须是public, non-static的; 名字和signature必须和interface保持一致;
· Property, indexer可以定义额外的accessor;
· Interface和interface的member都是abstract的,不提供默认的实现。
· Interface可以继承别的interface;
· 一个class可以多次继承一个interface,而只需要实现一次其member.
举例如下:
public class Minivan : Car, IComparable
{
public int CompareTo(object obj)
{
//implementation of CompareTo
return 0; //if the Minivans are equal
}
}