C# 我理解的接口、抽象類、以及事件

1、摘要

面試中無數次被問及到什麼是接口,什麼是抽象類,接口和抽象類有什麼區別?什麼是委託,什麼是事件。面試

請寫出貓叫了,老鼠跑了的例子。。。。。算法

這些東西對於一些初學者來講可能還真的有點搞不懂,對於通常工做5,6年以上的人來講,實在不屑一提,微笑編程

2、我的理解

類:對事物或者某一個物體的歸納描述瀏覽器

抽象類:對於一類事物的高度抽象。能夠實現任何接口函數

接口:對方法的一組抽象提取。工具

事件:暴露給關聯類的自定義實現,用於解除兩個類之間的耦合。blog

 

  • 抽象類

在基於模板Template模式中,也是咱們會無心中就會使用到的方法。將一些不變的公共的部分,提取出來方法父類當中,而對於每個獨立變化的點,咱們將接口

他們封裝爲抽象方法。事件

 

image

 

對於上述的一個模板,咱們標記爲紅色的方法,打印結果,它有可能在控制檯打印輸出,或者放在瀏覽器中顯示等等。對於這個點,它是可變的,也就是咱們所說的get

它是抽象的。

 

  • 接口

在策略Strategy模式當中,咱們瞭解到它是對抽象的策略算法的調用。例如,超市裏面計算商品的結果。

可能部分商品打3,5折,也有可能不打折,或者還有不少種可能,而咱們最終要獲得商品的總價格。對於上述的策略,咱們認爲它是可變的,是抽象的。

 

經典的策略模式代碼可能以下:

image

對於不一樣的策略方法,咱們只要再實現對應不一樣的IAction便可。

 

在C#中,咱們知道有個AOP的概念,俗稱面向切面編程。若是咱們不經過自定義的特性Attribute,或者第三方AOP方法攔截去實現,有沒有辦法實現呢。

如下是我在項目中常常使用到的方法,懶人就是懶啊。微笑

image

 

  • 事件

我我的將它理解爲解除兩個類之間的耦合的最佳工具。仍是用貓叫了,老鼠跑了來演示下。

image

在經典的觀察者模式當中,或許也會存在一些耦合,仔細觀察上述代碼,兩個類之間的沒有任何一方類的調用,咱們稱它們沒有任何的耦合。

那麼如何能讓她們相互通知,那就是依賴於咱們的事件。

image

 

代碼雖然很簡單,可是項目當中,大夥歷來不知道如何妙用它。最近的項目看見同事常常在父窗體調用子窗體,而後子窗體須要刷新父窗體的控件的時候。

直接在子窗體中將父窗體放入子窗體的構造函數中,直接產生了依賴。若是能在子窗體中聲明一個事件,將它理解爲要發送的消息。父窗體來實現這個接受消息的函數,是否是更加優雅點呢。微笑

相關文章
相關標籤/搜索