中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

interfac與類class互相轉換的方法是什么

發布時間:2022-01-14 09:21:04 來源:億速云 閱讀:145 作者:iii 欄目:互聯網科技

這篇文章主要介紹“interfac與類class互相轉換的方法是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“interfac與類class互相轉換的方法是什么”文章能幫助大家解決問題。

        接口就是類(事物)的標準,它規定了類(事物)的方法和屬性.一個類(事物)要實現一個接口的話,就必須實現它里面的方法和屬性.單一類(事物)我們就可以這樣簡單的理解,對于多個類(事物),接口不僅為這些類(事物)提供一個標準,而且還為他們之間的關系進行了約束,相當于契約。
       我們通常的做法是:類實現接口-》對該類進行實例化-》把類的實例轉換成實現的接口-》通過接口進行操作,大體上是這么一個過程,你可以放心使用接口已知的方法和屬性,而不用去擔心調用出錯, 而且你不用去管方法的代碼是怎樣實現的。但是,我們可以思考一個問題:接口相當于一個框架,是沒有實體內容的(具體的代碼),一個類的實例轉換成接口實例后,是否可以反向轉換呢?如果不經過腦袋思考的話,答案是否定的。但是,事實是怎樣的呢?下面看一下分析的結果:

      下面一段代碼,實現把一個自定義的控件動態的增加到一個窗體中。

            //ControlLibrary.UserControl1控件實現了ControlLibrary.IValue接口,里邊只有SetValue方法
            Assembly assembly=Assembly.LoadFrom ("ControlLibrary.dll");
            Type t = assembly.GetType("ControlLibrary.UserControl1");
            MethodInfo me = t.GetMethod("InitControl");
            Object obj = Activator.CreateInstance(t);
            ControlLibrary.UserControl1 ctrl = (ControlLibrary.UserControl1)me.Invoke(obj, new object[] { 10 });
            _value=(ControlLibrary.IValue)ctrl;    //_value是接口變量
            ControlLibrary.UserControl1 c = (ControlLibrary.UserControl1)_value;
            UserControl c1 = (UserControl)_value;
            this.Controls.Add(c);

             藍色字體是主要部分,按理說這段代碼 ControlLibrary.UserControl1 c = (ControlLibrary.UserControl1)_value(把接口轉換成自定義控件) 是不可以實現的,也違背了我們寫程序的基本規則。

             但是,經過分析上述做法是可能實現的,并且可以把接口轉換成自定義控件的實例增加到窗體中。請看一個反編譯后的代碼:

             圖1:在創建這個控件的時候會返會一個實例,同樣的會有一個實例的地址。ebp-4ch是一個指針地址。

             interfac與類class互相轉換的方法是什么

              圖2:當把創建的實例轉換成接口后,會分配一個新的指針地址,原來的ebp-4ch變成了ebp-3ch

              interfac與類class互相轉換的方法是什么

              圖3:再把接口實例轉換成自定義的控件實例,指針地址依然是ebp-3ch。這就證明了,接口實例和轉換后控件實例共用一個地址。

              interfac與類class互相轉換的方法是什么

              圖4:把轉換后的控件實例增加到窗體中是可以的。這個地址依然是ebp-3ch。

              interfac與類class互相轉換的方法是什么

              c1 實例的地址也是ebp-3ch,上述分析說明了類實例轉換成接口實例后,可以對接口實例進行反向轉換。

關于“interfac與類class互相轉換的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

唐海县| 卢氏县| 新河县| 乐陵市| 尼玛县| 如东县| 新建县| 东平县| 上饶县| 长泰县| 中阳县| 安庆市| 油尖旺区| 伊金霍洛旗| 伊川县| 长葛市| 渭源县| 南康市| 南宫市| 焦作市| 都江堰市| 浠水县| 巴东县| 台中市| 博客| 陵水| 辽阳县| 新化县| 柘荣县| 远安县| 淳安县| 松阳县| 绥化市| 凤翔县| 万盛区| 新泰市| 武乡县| 滦南县| 九龙坡区| 海门市| 时尚|