最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

C#中的接口和抽象类

CSharp 宇托 222浏览 暂无评论

之前总是不太理解C#中接口和抽象类的区别和相同点,在网上找了找,然后看了书,大体理解了。

接口与抽象类的相同点

  1. 两者都不能实例化。
  2. 两者都可以包含未实现的方法和属性声明。
  3. 两者都派生类必须实现未实现的方法和属性。

接口与抽象类的具体区别

  1. 接口可以定义属性,方法,事件,索引器,但不能定义字段(包括常量,静态字段,字段);而抽象类的可以,要注意的是静态字段不可定义成abstractvirtual的。
  2. 接口只能定义属性,方法,事件,索引器,而不能实现;而抽象类可以有上述定义的实现。
  3. 接口的方法和属性不能用访问修饰符修饰,它默认为public;而抽象类的方法和属性需要自己设置访问修饰符。
  4. 一个类可以实现多个接口,但抽象类只能被单继承。

接口与抽象类的注意点

  1. 类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类;而接口只是一个行为的规范或规定。
  2. 抽象类中的抽象成员不能是private的,否则派生类看不见他们。

一个相对好理解的比喻

  1. 飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
  2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音(接口污染))。

参考地址:c#接口和抽象类比较

转载请注明:宇托的狗窝 » C#中的接口和抽象类

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址