2.1. 首先創建一個強命名接口類庫(根據滿足條件設置屬性)
[ComImport]
[Guid("8DA56996-A151-4136-B474-32784559F6DF")]
public interface ISampleInterface
{
void GetUserInput();
string UserInput { get; }
}
2.2. 創建強命名類庫,引用接口類庫並定義實現以上接口的類:
public classSampleClass: ISampleInterface
{
private stringp_UserInput;
public stringUserInput { get{ return p_UserInput; } }
public voidGetUserInput()
{
Console.WriteLine("Please enter a value:");
p_UserInput = Console.ReadLine();
}
}
2.3. 創建客戶端應用程序,引用接口並使用反射的方法動態創建類型執行相應操作:
class Program
{
static void Main(string[] args)
{
Assembly sampleAssembly = Assembly.Load("TypeEquivalenceRuntime");
ISampleInterface sampleClass =
(ISampleInterface) sampleAssembly.CreateInstance("TypeEquivalenceRuntime.SampleClass");
sampleClass.GetUserInput();
Console.WriteLine(sampleClass.UserInput);
Console.WriteLine(sampleAssembly.GetName().Version.ToString());
Console.ReadLine ();
}
}
4. 修改實現了接口在的客戶端類,增加新的方法並修改程序集版本號和文件版本號為2.0.0.0:
public DateTime GetDate()
{
return DateTime.Now;
}
5. 再次執行客戶端程序,觀察不同(客戶端將輸出新的版本號)。
在.NET全部使用托管代碼創建的程序集自動會識別更新,也就是說不需要使用額外的屬性定義,直接 創建接口、實現接口類庫和客戶端類(或者沒有接口直接創建類庫在客戶端引用),在類庫更新後復制到 客戶端引用的位置,客戶端會自動檢測到該更新,這也是.NET程序集為開發人員帶來的好處。但是使用類 型等價支持的作用體現在什麼地方,我認為還是方便了COM API的訪問,因為COM可能是使用其他語言編寫 的,沒有辦法做到像.Net程序集那樣自動感應版本變化,個人意見,期望高手解答。
3. 總結
Visual C#中提供了動態類型、命名參數、可選參數和類型等價支持,為編程帶來便利,對於訪問COM API來說更方便了。而且微軟多次提到了諸如Office之類的文字,是不是意味著微軟在不斷的鼓勵程序員 不斷開發出其於Office的一些應用,亦或是現在其於Office的應用在不斷增加,還是應用程序中與Office 的交互在不斷增加,通過增強的特性使這些工作更方便,來鞏固微軟件地位?一家之言,請高手不吝賜教 。