1.sealed关键字修饰一个类,也可以修饰实现方法或者属性。当sealed用于修饰一个类时,这个类不可以被继承,因此,这个类也叫做密封类。相对应的,被abstract修饰的类称为抽象类,这个类必须继承才有意义。
class Program
{
static void Main(string[] args)
{
}
}
class Product
{
private string name;
public virtual void display()
{
Console.WriteLine("这是product类\n");
}
}
sealed class Computer:Product
{
public Computer() { }
}
///
/// 将报错,因为继承的Computer为密封类
///
//class Surface : Computer
//{
//}
class Phone:Product
{
public Phone() { }
public sealed override void display()
{
Console.WriteLine("这是Phone类的display,密封方法!");
}
}
class WP:Phone
{
///
/// 将报错,因为继承的Phone类中display为密封方法,无法重写
///
//public sealed override void display()
//{
//}
}
Sealed修饰实例方法或属性,应该与override一起使用。
2.interface接口用于给使用者显示功能并使用,而不必知道其中的实现。当功能模块需要变更,程序狗只需要将该功能模块的实现代码进行修改,其他调用这个接口的程序将无需变动。接口的这种应用模式称之为Bridge模式,Bridge模式分离意图和实现,以得到更好的扩展性。
class Program
{
static void Main(string[] args)
{
Computer a = new PC();
Console.WriteLine("这台电脑的CPU为:{0}",a.getCPU());
Console.WriteLine("这台电脑的显卡为:{0}",a.Videocard);
//报错,因为Computer接口的声明中Videocard为只读(没有set访问器)
//a.Videocard = Console.ReadLine();
PC b = new PC();
//实例b可以写入Videocard属性
b.Videocard = Console.ReadLine();
}
}
interface Computer
{
string getCPU();
string Videocard
{
get;
}
}
class PC:Computer
{
private string _vc = "Nvidia";
public string Videocard
{
get
{
return _vc;
}
set
{
_vc = value;
}
}
public string getCPU()
{
return "Intel";
}
}
而且要补充一点,接口可以继承多个接口,但是类只能单继承。接口的访问权限是public,类或者结构实现接口的成员必须保持public,并且实现方法的签名必须和接口方法签名要一致。