相同点:
1.他们都不能实例化。
2.抽象类中的抽象方法和接口方法一样,都不能有方法体。
不同点:
1.抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性,如构造函数,字段,静态成员等。接口可以有属性、事件、索引器,而且这些都是public。
2.抽象类中的普通方法可以有方法体,而接口方法没有方法体。
3.接口中的方法不能有访问修饰符,抽象类中的抽象方法被继承,需要override重写 .
4.接口更像是一种规范,一种约束。
5.一个子类只能继承一个抽象类,但却可以实现多个接口。
注:不能对private,字段抽象。实现接口不能加 override,必须加 public。
属性与字段区别
公共字段只是类用public修饰符所公开的简单公共变量,而属性则是对字段的封装,它使用get和set访问器来控制如何设置或返回字段值。
由于属性的实质是方法(get或set方法),在IL中是没有属性的概念的。所以对于开发过程中常用的赋值和取值操作来说,使用公共变量肯定会比使用属性速度要快,性能上也稍高(方法和变量哪个速度不用说了吧)。
公共字段虽然在速度上快,但它必须开放字段为public,这样一来对象的调用者便可以直接修改其值,值的内容是否合法,运行中是否会出错,就没有了保障,进而会大大降低类的可重用性;相反,属性类似于方法,它可以对存入的变量的值进行处理.