1.接口
接口的概念及声明
接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为
接口可以包含方法、属性、索引器和事件作为成员,但是并不能设置这些成员的具体值,
       也就是说,只能定义,不能给它里面定义的东西赋值

接口特征:
a.接口类似抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员
b.不能直接实例化接口
c.接口可以包含时间、索引器、方法和属性,不包含方法的实现
d.类和结构可从多个接口继承
e.接口自身可从多个接口继承

接口的说明:使用interface关键字  例:修饰符 interface 接口名称 : 继承的接口列表{ 接口内容;}
注意:可以使用new、public、protected、internal、private等修饰符声明接口,但接口成员必须是公共的

显式接口  
注意: 1.显式接口成员实现中不能包含访问修饰符、adstract、virtual、override或static修饰符
       2. 显式接口成员属于接口的成员而不是类的成员,因此,不能使用类对象直接访问,只能通过接口对象来访问

2.抽象类与抽象方法
如果一个类不与具体的事务相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类
如果在抽象类中声明方法时加上abstract关键字,则为抽象方法

抽象类主要是用来提供多个派生类可共享的基类的公共定义 与非抽象类的区别:
a.抽象类不能直接实例化
b.抽象类中可以包含抽象成员,但非抽象类不可以
c. 抽象类不能被封装

抽象类的声明:C#中使用abstract关键字  例:访问修饰符 abstract class 类名:基类或接口{ }

抽象方法就是在声明方法时加上abctract关键字,注意: 抽象方法必须声明在抽象类中,且不能使用virtual、static和private修饰符

3.抽象类与接口
抽象类和接口都包含可以由派生类继承的成员,它们都不能直接实例化,但可以声明它们的变量

区别:
a.它们的派生类只能继承一个基类即只能直接继承一个抽象类,但可以继承任意多个接口
b.抽象类中可以定义成员的实现,但接口不可以
c.抽象类中可以包含字段、构造函数、静态成员或常量等,接口中不可以
d.抽象类中的成员可以是私有的、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的

4.密封类与密封方法
密封类的概述及声明
4.1 目的:为了避免滥用继承
4.2 密封的前提:
    a.类是静态类
    b.类包含带有安全敏感信息的继承的受保护成员
    c.类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类
    d.类是一个要求使用反射进行快速搜索的属性。密封属性可提高反射在检索属性时的性能
4.3 密封的声明: C#中使用sealed关键字声明密封类   语法格式:访问修饰符 sealed class 类名:基类或接口{}
4.4 说明:
     1.密封类不能作为基类被继承,但它可以继承别的类或接口
     2. 在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能在派生类中重写
     3.由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abstract修饰符同时使用

密封方法概述及声明
并不是每个方法都可以声明为密封方法,密封方法只能用于对基类的虚方法进行实现,并提供具体的实现。
所以声明密封方法时,sealed修饰符总是和override修饰符同时使用