国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#中實(shí)現(xiàn)VB中的CreateObject方法

2019-11-18 16:29:48
字體:
供稿:網(wǎng)友

    經(jīng)常看到有些VB的例子中直接用個(gè)CreateObject就可調(diào)用系統(tǒng)功能(大多是COM對象),像用戶設(shè)定,網(wǎng)絡(luò)設(shè)定等等。雖然C#中可以通過使用VB的命名空間的方法來調(diào)用CreateObject函數(shù),但是這樣比較沒什么用,因?yàn)樯傻膶ο蟮乃鶐в械姆椒ǘ疾荒苁褂谩#中還可以直接用添加引用的方式來調(diào)用一些對象,前提是你知道該添加哪個(gè)引用。
     當(dāng)我上網(wǎng)搜索,已經(jīng)搜索到很多VB的成功用CreateObject調(diào)用的例子,C#的例子卻很難找到的時(shí)候,就干脆用類似VB的方法算了,很簡單。免得繼續(xù)在網(wǎng)絡(luò)中大海撈針了。


C#中類似 CreateObject 的方法就是 System.Activator.CreateInstance.  后續(xù)的對象函數(shù)的調(diào)用可以通過InvokeMember方法來實(shí)現(xiàn)。

如在VB中的源代碼如下:
這種方式叫Late-Bind,關(guān)于早期綁定和后期綁定的區(qū)別見 http://msdn2.microsoft.com/zh-cn/library/0tcf61s1(VS.80).aspx

Public Sub TestLateBind()
        Dim o As Object = CreateObject("SomeClass")
        o.SomeMethod(arg1, arg2)
        w = o.SomeFunction(arg1, arg2)
        w = o.SomeGet
        o.SomeSet = w
End Sub
轉(zhuǎn)換成C#的代碼如下所示:

public void TestLateBind()
{
        System.Type oType = System.Type.GetTypeFrom        object o = System.Activator.CreateInstance(oType);
        oType.InvokeMember("SomeMethod", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] {arg1, arg2});
        w = oType.InvokeMember("SomeFunction", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] {arg1, arg2});
        w = oType.InvokeMember("SomeGet", System.Reflection.BindingFlags.GetProperty, null, o, null);
        oType.InvokeMember("SomeSet", System.Reflection.BindingFlags.SetProperty, null, o, new object[] {w});
}


里面有方法,屬性的調(diào)用設(shè)定,很簡單。

實(shí)際例子如下,調(diào)用Office功能的:

  public void TestLateBind()
        {
            System.Type
WordType = System.Type.GetTypeFromProgID( "Word.application" );
            Object word = System.Activator.CreateInstance( wordType );
            wordType.InvokeMember( "Visible", BindingFlags.SetProperty, null, word, new Object[] { true } );
            Object documents = wordType.InvokeMember( "Documents", BindingFlags.GetProperty, null, word, null );
            Object document = documents.GetType().InvokeMember( "Add", BindingFlags.InvokeMethod, null, documents, null );
        }
這種Activator.CreateInstance方法還可以用來創(chuàng)建實(shí)例,并調(diào)用某些接口方法。畢竟接口必須要實(shí)例才能調(diào)用。
可以參考我的另外一個(gè)隨筆里面的源代碼
http://www.survivalescaperooms.com/phytan/archive/2007/07/11/814474.html


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 都江堰市| 贡山| 潜江市| 汾阳市| 绥中县| 湟源县| 江安县| 北海市| 遂川县| 施甸县| 临江市| 鹤庆县| 昌平区| 阳原县| 溧水县| 浮山县| 原平市| 桐柏县| 县级市| 尚志市| 永宁县| 铜梁县| 安泽县| 宿松县| 石屏县| 苍梧县| 水富县| 军事| 巴楚县| 德清县| 招远市| 河池市| 都兰县| 阿尔山市| 莱芜市| 读书| 葫芦岛市| 当阳市| 巴里| 鄂托克前旗| 扶沟县|