virtual 、 abstract、interface 的区别
1.virtual是抽象出来的方法或字段 , 以便派生类 (子孙后代类) 来重写这个方法 , 但是需要 “{ }”大括号来声明下代码块 , 这点和 abstract不同
2.abstract是隐式的 virtual , 只允许在 abstract 类中声明 abstract 方法, 这和static类相类似(但abstract类中又不是必须全部声明为abstract 类型的方法) , 而 virtual则不受限制 ;就是说 abstract 比 virtual 定义上就严格很多
3.abstract 和 interface 都不能实例化 :一个是抽象出来的类 ,一个是抽象出来相同功能的接口 ;意味着一个是基于实体的( 动物有很多,人是动物,狗也是动物, 我们可以抽象出 animal类;人可以走路,狗也可以走路,我们可以抽象出来一个 “走路”方法的接口, 一个接口一般就定义专一功能, 否则可能造成接口污染)
4.interface定义也比较严格 :只包含方法声明,函数连“{ }”都不能有,成员除了方法之外还有 属性、事件、索引器; 不能有常量、字段、构造函数、析构函数、静态成员这几类
5. 接口可以实现多重继承, 类在C#中是不实现多重继承的; 可以将接口中的方法声明映射到abstract类中 ,让其子类来实现
注意下:属性和字段的区别:
属性本质上来说是个方法,但是在通过属性给内部字段赋值(set)可以加上自己的逻辑判断或限制等等,通过属性取值取值(get)当然也可以加一些跟你业务逻辑相关的code。总之是用属性是个好习惯,不要直接把字段暴露出来。get{reture xxx;}表示可读set{xxx = value;}表示可写
字段就是类内部用的.存储数据