Pengantar warisan lintas bahasa di .NET.
Pengenalan .NET membawa pengembangan bahasa menjadi lebih sederhana dari sebelumnya. Kita tidak perlu lagi khawatir tentang penggunaan wrapper ATL di C++ untuk mengakses komponen VB, atau memanggil konvensi ketika mencoba berinteraksi dengan kode FORTRAN. Semua bahasa yang mendukung .NET kini menjadi entitas kelas satu dan saling beroperasi dengan mulus, memungkinkan sistem yang berbeda untuk bekerja sama dengan lebih mudah dari sebelumnya, dan juga memungkinkan pengembang dengan keahlian berbeda untuk bekerja sama secara harmonis dalam proyek.
Membuat komponen dalam satu bahasa yang dapat digunakan oleh bahasa lain sangatlah sederhana. Gunakan Visual Studio.NET Wizard untuk membuat perpustakaan kelas dalam bahasa .NET favorit Anda, kompilasi, dan selesai.
Misalnya, kita akan membuat kelas sederhana di C# yang memaparkan dua metode:
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;
}
}
}
Metode pertama, MyMethod
, mengambil objek string dan mengembalikan panjangnya. Metode kedua adalah virtual, dan mengembalikan kuadrat dari angka yang dimasukkan. Asumsikan kita telah mengkompilasi komponen ini ke MyCSClass.dll .
Untuk menggunakan komponen ini menggunakan C++ terkelola, kita perlu mengimpor rakitan ke dalam program kita terlebih dahulu:
# using " MyCSClass.dll "
Itu saja. Tidak ada typelib, tidak ada file .def, tidak ada header ATL. Kami cukup menggunakan pernyataan #using
(dan memastikan dll ada di jalur pencarian kompiler) dan membiarkan kompiler melakukan sisanya.
Setelah kita mengimpor kelas, kita kemudian dapat menggunakan deklarasi using
untuk menyimpan pengetikan:
using namespace MyCSClass ;
Perhatikan perbedaannya di sini: #using
adalah untuk mengimpor perakitan ke proyek Anda. using
menentukan namespace yang akan kita gunakan, dan hanya menyimpan pengetikan.
Sebenarnya menggunakan kelas ini sama dengan menggunakan tipe referensi terkelola lainnya di .NET:
CSClass *cs = new CSClass();
int result;
result = cs-> MyMethod ( " Hello World " ); // will return 11
result = cs-> MyVirtualMethod ( 2 ); // will return 2 squared
Interoperabilitas lintas bahasa lebih dari sekadar memudahkan penggunaan komponen yang ditulis dalam berbagai bahasa. Kita juga dapat mewarisi kelas baru dari komponen yang ditulis dalam bahasa lain, tanpa memerlukan kode sumber asli untuk komponen tersebut .
Bayangkan Anda telah membeli, atau memperoleh beberapa komponen super keren yang Anda suka gunakan, namun Anda ingin memiliki satu atau dua fitur lagi, atau memiliki fungsi yang sedikit berbeda. Di .NET Anda dapat mewarisi kelas baru dari komponen tersebut untuk membuat komponen baru yang berfungsi sesuai keinginan Anda. Anda tidak membuat pembungkus untuk komponen: Anda membuat komponen baru yang memperoleh properti, metode, dan bidangnya serta dapat mengganti metode virtual komponen lama dan menambahkan metode baru.
Kembali ke contoh kita. Metode CSClass::MyVirtualMethod
adalah virtual, jadi mari kita deklarasikan kelas C++ baru yang diturunkan dari kelas C# ini, dan ganti metode virtual tersebut
__gc class CPPClass : public MyCSClass ::CSClass
{
public:
// returns the cube of the given number
virtual int MyVirtualMethod ( int n)
{
return n*n*n;
}
};
Kami telah mengganti CSClass::MyVirtualMethod
dengan metode baru kami yang mengembalikan kubus, bukan kuadrat, dari angka yang diberikan. Setelah kita mengkompilasi kode, kita memiliki komponen C++ baru yang menggantikan metode virtual di kelas C#, dan juga memiliki fungsi non-virtual 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
Unduhan yang menyertai artikel ini berisi komponen C# dan VB.NET yang digunakan oleh, dan diwarisi oleh, komponen C++.
Interoperabilitas lintas bahasa memungkinkan Anda memperluas komponen pihak ketiga dengan fungsionalitas Anda sendiri dengan cara berorientasi objek. Anda dapat dengan mudah bekerja dengan komponen dalam bahasa apa pun yang mendukung CLS, dan saat melakukan debug, Anda dapat menelusuri pemanggilan fungsi antar komponen dan antar bahasa dalam aplikasi yang sama. Penanganan pengecualian juga konsisten di berbagai bahasa. Jika sebuah komponen dalam satu bahasa memunculkan pengecualian, komponen tersebut dapat ditangkap dan ditangani oleh kode yang ditulis dalam bahasa lain. Yang terpenting, ini memungkinkan Anda dan tim Anda bebas memilih bahasa yang ingin mereka gunakan.
16 Okt 2001 - diperbarui untuk beta 2