《CLR.via.C#第三版》第二部分第13章節 介面 讀書筆記(七)

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   ar   使用   sp   java   

這章的書寫感覺很普通,是些基礎的認知知識。

其中一點的重要認知,泛型介面的好處(其實也是使用泛型的好處之一):編譯時間型別安全&處理實值型別時減少裝箱。

再說點書上沒有的。本來這些知識我打算另外分類在C#基礎裡講的,這裡先單獨表述下。

介面回調

其實我想不通為什麼這本書不講一下介面回調這個概念,我可不會相信介面回調只在java中用到。

到現在為止,我突然發現,很多編程的基礎概念,於物件導向編程的語言來說,都是通用的,但是抱歉,在C#裡(相關書籍)居然沒有!但我相信你翻閱Java書籍就有很大幾率看到這些概念的詳盡解釋。

還好我也學過Java。

直到現在,我鮮少在C#書籍中看到"介面回調"這一概念。這對於一開始就接觸C#的初學者來說,如果很多編程基礎概念不講,真的很難理解一些對象的行為。

我開始懷疑C#書籍的編寫者都是站在怎樣的高度。

介面回調也是多態的體現。

首先用一段代碼來樣本介面回調:

介面IMyInterface1的代碼如下:

namespace CATest101{    interface IMyInterface1    {        void Method1();    }}

類MyClass1,實現介面IMyInterface1,代碼(省略命名空間)如下:

    public class MyClass1:IMyInterface1    {        public void Method1()        {            Console.WriteLine("MyClass1中的方法:Method1()");        }    }

Main方法中的代碼(介面回調):

        static void Main(string[] args)        {            MyClass1 my = new MyClass1();            IMyInterface1 i = my;//聲明介面類型指標指向MyClass1的執行個體對象             i.Method1();            Console.ReadLine();        }

輸出:

如所示,介面變數i調用Method1方法,實際調用的是子類MyClass1中的Method1方法。

這就是介面回調。由介面回調會引出另一個類似概念:

向上轉型

向上轉型即是:父類引用指向子類對象,即類似Father f = new Child();的代碼錶述形式。

現假定父類子類都有自己的myMethod方法,

調用f.myMethod();如果父類中myMethod是虛方法,那麼調用的是子類的myMethod(子類必須使用override重寫的情況),如果父類的myMethod非虛方法,則f.myMethod將調用自己內部的myMethod方法。

設計模式中“簡單原廠模式”就是利用的向上轉型這個原理。

最後套用一句百科知識:

介面回調和向上轉型是設計模式的解耦核心,可以說幾乎所有的模式都是建立在這兩者的應用之上的。

《CLR.via.C#第三版》第二部分第13章節 介面 讀書筆記(七)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.