2014年1月25日 星期六

C# - Abstract & Interface 抽象類別和介面

抽象類別Abstract和介面Interface一直以來是初學者學習物件導向時常常會霧裡探花摸不著頭緒的一項課程,筆者在這邊分享一下自身的經驗談。

抽象類別Abstract:
是用來定義相同種類的物件,所需要具備的共通特性;例如人,是所有人的基底,人有思考、吃、喝、睡覺等等共同的特性,但是每種人行為方式不一樣,所以將這些基本特性,寫成抽象類別與方法,讓其它類別來繼承並且實做方法,這就就抽象類別的意義。

介面Interface:
是用來定義不同種類的物件中,針對某種特性,所需要具備的相同功能;例如走路,機器人,和人類,是兩種不同的類別,但有相同的功能。
另一種思考:
類別是對物件的抽象:建構物件的各式成員與行為模式。
抽象類別是對類別的抽象:提供基底,專門給同性質的類別繼承。
介面是對行為的抽象:任何類別若繼承介面並且實做後,皆具有此功能。

一般來說,interface 較類似抽象類別,但它和Abstract有以下的不同點:
  • interface 裡所有被宣告的 property、method、event 都是 public 的abstract class 裡你可以有 private 和 protected 的相關宣告
  • interface 裡所有被宣告的 property、method 都必需要被繼承且實作才能使用abstract class 你可以不用實作,因為你可以 new 一個 abstract class雖然那沒什麼意義,但是你沒辦法直接 new一個 interface,你必需 new 出繼承了該 interface 並實作的 class,再從那上面取得(Query)該interface。
  • interface 在 C# 裡可以多重繼承,class 只能單一繼承。

-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言