這篇文章主要介紹“interfac與類class互相轉(zhuǎn)換的方法是什么”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“interfac與類class互相轉(zhuǎn)換的方法是什么”文章能幫助大家解決問題。
“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個人一直以來堅持追求的企業(yè)文化。 創(chuàng)新互聯(lián)公司是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于網(wǎng)站制作、做網(wǎng)站、軟件開發(fā)、設(shè)計服務(wù)業(yè)務(wù)。我們始終堅持以客戶需求為導(dǎo)向,結(jié)合用戶體驗與視覺傳達(dá),提供有針對性的項目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場,引領(lǐng)市場!
接口就是類(事物)的標(biāo)準(zhǔn),它規(guī)定了類(事物)的方法和屬性.一個類(事物)要實(shí)現(xiàn)一個接口的話,就必須實(shí)現(xiàn)它里面的方法和屬性.單一類(事物)我們就可以這樣簡單的理解,對于多個類(事物),接口不僅為這些類(事物)提供一個標(biāo)準(zhǔn),而且還為他們之間的關(guān)系進(jìn)行了約束,相當(dāng)于契約。
我們通常的做法是:類實(shí)現(xiàn)接口-》對該類進(jìn)行實(shí)例化-》把類的實(shí)例轉(zhuǎn)換成實(shí)現(xiàn)的接口-》通過接口進(jìn)行操作,大體上是這么一個過程,你可以放心使用接口已知的方法和屬性,而不用去擔(dān)心調(diào)用出錯, 而且你不用去管方法的代碼是怎樣實(shí)現(xiàn)的。但是,我們可以思考一個問題:接口相當(dāng)于一個框架,是沒有實(shí)體內(nèi)容的(具體的代碼),一個類的實(shí)例轉(zhuǎn)換成接口實(shí)例后,是否可以反向轉(zhuǎn)換呢?如果不經(jīng)過腦袋思考的話,答案是否定的。但是,事實(shí)是怎樣的呢?下面看一下分析的結(jié)果:
下面一段代碼,實(shí)現(xiàn)把一個自定義的控件動態(tài)的增加到一個窗體中。
//ControlLibrary.UserControl1控件實(shí)現(xiàn)了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);
藍(lán)色字體是主要部分,按理說這段代碼 ControlLibrary.UserControl1 c = (ControlLibrary.UserControl1)_value(把接口轉(zhuǎn)換成自定義控件) 是不可以實(shí)現(xiàn)的,也違背了我們寫程序的基本規(guī)則。
但是,經(jīng)過分析上述做法是可能實(shí)現(xiàn)的,并且可以把接口轉(zhuǎn)換成自定義控件的實(shí)例增加到窗體中。請看一個反編譯后的代碼:
圖1:在創(chuàng)建這個控件的時候會返會一個實(shí)例,同樣的會有一個實(shí)例的地址。ebp-4ch是一個指針地址。
圖2:當(dāng)把創(chuàng)建的實(shí)例轉(zhuǎn)換成接口后,會分配一個新的指針地址,原來的ebp-4ch變成了ebp-3ch
圖3:再把接口實(shí)例轉(zhuǎn)換成自定義的控件實(shí)例,指針地址依然是ebp-3ch。這就證明了,接口實(shí)例和轉(zhuǎn)換后控件實(shí)例共用一個地址。
圖4:把轉(zhuǎn)換后的控件實(shí)例增加到窗體中是可以的。這個地址依然是ebp-3ch。
c1 實(shí)例的地址也是ebp-3ch,上述分析說明了類實(shí)例轉(zhuǎn)換成接口實(shí)例后,可以對接口實(shí)例進(jìn)行反向轉(zhuǎn)換。
關(guān)于“interfac與類class互相轉(zhuǎn)換的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。