偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

概述C# COM接口相關(guān)知識(shí)

開發(fā) 后端
本文介紹為了保證同一個(gè)C# COM接口具有相同的托管類型推薦使用PIA,但是,在使用PIA的過程中,發(fā)現(xiàn)PIA有不少問題,因此CLR Interop的某位牛人Architect想出了新Idea。

C# 4.0中有下面這些功能: 1. dynamic/IDynamicObject 這個(gè)改進(jìn)使得C#向動(dòng)態(tài)語言又進(jìn)了一步,雖然C#并不會(huì)變成類似Perl/Python之類的動(dòng)態(tài)語言(因?yàn)锳nders認(rèn)為靜態(tài)語言所支持的一些特性比如Intellisense,類型檢查等等是相當(dāng)有用的),但是這并不代表C#不應(yīng)該對動(dòng)態(tài)特性提供更好的支持。從我們Interop的角度來看,dynamic比較類似COM中的IDispatch,也就是動(dòng)態(tài)的根據(jù)提供的函數(shù)/屬性名字動(dòng)態(tài)選擇匹配的動(dòng)作并執(zhí)行之,只不過這個(gè)接口現(xiàn)在變成了IDynamicObject。寫法也很類似VB6。原來要寫:

  1. object obj = GetObject();  
  2. 2: obj.GetType().InvokeMember(“CallSomeFunc”, …., new object[] { 1 }); 

現(xiàn)在只需:

  1. dynamic obj = GetObject();  
  2. obj.CallSomeFunc(1); // obj通過IDynamicObject接口,支持CallSomeFunc方法。 

這一切都是通過IDynamicObject接口實(shí)現(xiàn)的。只要對象支持IDynamicObject,那么任意對象都可以通過這種方式來直接調(diào)用,不管是COM,Python,JavaScript,等等。這個(gè)功能感覺基本上就是定義一個(gè)C# COM接口,然后編譯器再把代碼翻譯一下就好了,關(guān)鍵還是各種對象的支持。 2. Optional Parameter / Named Parameters 以前C#特意不支持的可選參數(shù)終于現(xiàn)在可以支持了。命名參數(shù)也可以支持了,使用參數(shù)加冒號(hào):

  1. OpenTextFile(“foo.txt”, Encoding.UTF8, bufferSize:123) 

Improved COM Interoperability

1.Automatic object –> dynamic mapping 原來返回object的地方,現(xiàn)在object可以自動(dòng)被視為dynamic。因此,以前需要cast的地方現(xiàn)在可以省去cast了,反正dynamic 對象可以通過IDynamicObject來間接調(diào)用IDispatch接口(我覺得應(yīng)該還是通過MemberInfo.Invoke來間接調(diào)用 IDispatch,但是暫時(shí)沒有時(shí)間驗(yàn)證其實(shí)現(xiàn)方式)來自動(dòng)調(diào)用對應(yīng)的函數(shù),而不需要cast到對應(yīng)的interface再調(diào)用。原來是: (Range)excel.Cells[1, 1].Value = xxx; 現(xiàn)在可以寫成:excel.Cells[1,1].Value = xxx; // call IDynamicObject.SetMember(“Value”, xxx);

2.Optional and named parameters 這個(gè)無需多說了吧。BTW,現(xiàn)在TlbImp的結(jié)果中(也就是Interop Assembly)已經(jīng)在Metadata包含了缺省值,只是C#不用而已,現(xiàn)在C#可以直接使用了。

3.Indexed Property 這個(gè)Anders一句話帶過,暫時(shí)不清楚具體是什么改進(jìn)。

4.Optional ref modifier 在COM Interop時(shí)候可以不用寫ref。具體的Anders也沒有多談。覺得應(yīng)該是很小的改動(dòng)。

5.Interop Type Embedding (NO PIA) 這個(gè)也就是之前我在前一篇提到的Type Equvalency。原來為了保證同一個(gè)C# COM接口具有相同的托管類型(因?yàn)閷τ谕粋€(gè)C# COM接口可以有多個(gè)對應(yīng)的托管的接口),推薦使用PIA(Primary Interop Assembly)。但是,在使用PIA的過程中,發(fā)現(xiàn)PIA有不少問題,因此CLR Interop的某位牛人Architect想出了這個(gè)新Idea:不使用PIA,而是允許對應(yīng)同一C# COM接口的不同托管接口之間可以互換使用,無需Cast,CLR內(nèi)部將它們等價(jià)看待。這是一個(gè)比較大的改動(dòng),不管是對于編譯器,還是CLR。

【編輯推薦】

  1. 簡單介紹C#預(yù)處理
  2. 學(xué)習(xí)C#無詞尾符號(hào)經(jīng)驗(yàn)談
  3. C#調(diào)用QuickTest自動(dòng)化
  4. 詳解C#正規(guī)表達(dá)式
  5. C#字符串插入html標(biāo)簽
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-08-10 13:40:46

創(chuàng)建C# COM對象

2009-08-25 10:57:09

C#接口

2009-09-02 14:18:08

C#聲明COM接口

2009-08-03 18:26:18

C#定義接口成員

2009-08-21 08:41:44

C#反射

2009-08-28 10:22:47

C# DLLImpor

2009-09-02 14:14:44

C# COM接口轉(zhuǎn)換

2009-08-07 13:30:20

C# Excel導(dǎo)入

2009-08-13 14:59:00

C#數(shù)據(jù)訪問層

2009-09-01 16:14:08

C# Socket類

2009-08-20 16:28:45

C#匿名方法

2009-08-25 16:49:44

C#使用if語句

2009-09-03 10:42:16

C# Employee

2009-08-25 10:08:39

C# MyData對象

2009-08-24 18:09:13

C#構(gòu)造函數(shù)

2009-08-19 11:09:00

C# Cast<T>

2009-08-17 09:57:00

C# Windows

2009-08-31 09:44:23

C# Employee

2009-09-03 11:15:38

C#設(shè)置Coopera

2009-07-31 14:08:54

C# 匿名函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)