<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#接口(interface)與類(class)的實例互相轉(zhuǎn)換深度解析

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

            下面一段代碼,實現(xiàn)把一個自定義的控件動態(tài)的增加到一個窗體中。

                  //ControlLibrary.UserControl1控件實現(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);

                 

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

                  

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

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

                  

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

                   

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

                   

                  

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

                   

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

                     

      來源:【百木破解】C#接口【interface】與類【class】的實例互相轉(zhuǎn)換深度解析
      http://www.bmpj.net/forum-viewthread-tid-195-fromuid-15.html

      QQ群組發(fā)布群號。

      posted @ 2011-03-09 16:52  iNeuOS工業(yè)互聯(lián)網(wǎng)系統(tǒng)  閱讀(3023)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 亚洲色欲色欲天天天www| 国内不卡不区二区三区| 不卡乱辈伦在线看中文字幕| 成年女人免费碰碰视频| 日韩人妻无码一区二区三区久久| 久久天天躁狠狠躁夜夜躁2o2o| 国产尤物精品自在拍视频首页| 德钦县| 老熟妇仑乱换频一区二区| 无码人妻精品一区二区三区66 | 一本色道久久加勒比综合 | 日韩人妻无码精品久久久不卡| 麻豆精品一区二区三区蜜桃| 中文字幕日韩人妻一区| 少妇人妻偷人偷人精品| 亚洲an日韩专区在线| 伊人蕉久影院| 亚洲高潮喷水无码AV电影| 亚洲人成电影网站色| 国产成人精品亚洲精品日日| 狠狠综合久久综合88亚洲| 国产午夜亚洲精品国产成人| 国产精品不卡一区二区久久| 91精品乱码一区二区三区| 亚洲综合伊人久久大杳蕉| 无码av免费毛片一区二区| 亚洲无av中文字幕在线| 亚洲综合精品第一页| 欧美日韩国产va在线观看免费| 午夜亚洲国产理论片亚洲2020| 国模少妇无码一区二区三区| 99久久亚洲综合网精品| 精品国产成人国产在线观看 | 国产18禁黄网站禁片免费视频 | 国产亚洲精品久久久久秋霞| 屁股中文字幕一二三四区人妻 | 国产一区二区不卡在线| 一级片免费网站| 国产蜜臀在线一区二区三区| 超碰成人人人做人人爽| 熟女视频一区二区在线观看|