.NET 中的跨語言繼承簡介。
.NET 的引入使語言開發變得比以往更簡單。我們不再需要擔心在 C++ 中使用 ATL 包裝器來存取 VB 元件,或在嘗試與 FORTRAN 程式碼互動時呼叫約定。現在,所有支援.NET 的語言都是一流的實體,並且可以無縫地進行互通,從而使不同的系統比以往更容易地協同工作,並且還允許具有不同技能的開發人員在專案中和諧地協同工作。
用一種語言創建可供另一種語言使用的元件非常簡單。使用 Visual Studio.NET 精靈以您最喜歡的 .NET 語言建立類別庫,對其進行編譯,然後就完成了。
例如,我們將在 C# 中建立一個簡單的類,它公開兩個方法:
namespace MyCSClass
{
using System;
public class CSClass
{
public CSClass () { }
// returns the length of the passed string
public int MyMethod (string str)
{
return str. Length ;
}
// returns n squared
virtual public int MyVirtualMethod ( int n)
{
return n*n;
}
}
}
第一個方法MyMethod
接受一個字串物件並傳回其長度。第二種方法是虛擬方法,傳回傳入數字的平方。
要使用託管 C++ 使用此元件,我們需要先將組件匯入到我們的程式中:
# using " MyCSClass.dll "
就是這樣。沒有類型庫,沒有 .def 文件,沒有 ATL 標頭。我們只需使用#using
語句(並確保 dll 位於編譯器搜尋路徑中),然後讓編譯器完成其餘的工作。
一旦我們導入了類,我們就可以使用using
聲明來節省輸入:
using namespace MyCSClass ;
請注意此處的差異: #using
用於將程序集匯入到您的專案中。 using
指定我們將使用的名稱空間,並且僅節省輸入。
實際上使用該類別與使用 .NET 中的任何其他託管參考類型相同:
CSClass *cs = new CSClass();
int result;
result = cs-> MyMethod ( " Hello World " ); // will return 11
result = cs-> MyVirtualMethod ( 2 ); // will return 2 squared
跨語言互通性不僅僅是簡化以不同語言編寫的元件的使用。我們也可以從用其他語言編寫的元件繼承新的類,而不需要元件的原始原始碼。
想像一下,您已經購買或以其他方式獲得了一些您喜歡使用的超酷組件,但您希望擁有一兩個以上的功能,或者它的功能略有不同。在 .NET 中,您可以從該元件繼承一個新類,以建立一個完全按照您希望的方式工作的新元件。您不是為組件建立包裝器:您正在建立一個新組件,該組件派生其屬性、方法和字段,並且可以覆蓋舊組件的虛擬方法並添加新方法。
回到我們的例子。 CSClass::MyVirtualMethod
方法是虛擬方法,因此讓我們宣告一個從該 C# 類別衍生的新 C++ 類,並重寫該虛擬方法
__gc class CPPClass : public MyCSClass ::CSClass
{
public:
// returns the cube of the given number
virtual int MyVirtualMethod ( int n)
{
return n*n*n;
}
};
我們用新方法重寫了CSClass::MyVirtualMethod
,該方法傳回給定數字的立方,而不是平方。編譯程式碼後,我們就有了一個新的 C++ 元件,它重寫了 C# 類別中的虛擬方法,並且還具有非虛擬MyMethod()
函數。
CPPClass *cpp = new CPPClass();
int result;
result = cpp-> MyMethod ( " Hello World " ); // will return 11
result = cpp-> MyVirtualMethod ( 2 ); // Will output 2 cubed, not 2 squared
本文隨附的下載包含一個 C# 和一個 VB.NET 元件,該元件由 C++ 元件使用和繼承。
跨語言互通性可讓您以物件導向的方式使用您自己的功能擴展第三方元件。您可以輕鬆地使用任何符合 CLS 的語言的元件,並且在偵錯時,您可以單步執行同一應用程式中元件之間以及語言之間的函數呼叫。不同語言的異常處理也是一致的。如果一種語言的元件拋出異常,則可以由另一種語言編寫的程式碼捕獲並處理該異常。最重要的是,它允許您和您的團隊自由選擇他們想要使用的工作語言。
2001 年 10 月 16 日 - 更新為 beta 2