CLR (Common Language Runtime) chạy trong .NET Framework. Mọi managed code, không cần biết được compiled từ ngơn ngữ nào đều có thể làm việc chung nhau, tức là ta có thể tạo một class trong ngơn ngữ nầy và dùng nó trong một ngơn ngữ khác, kể cả việc thừa kế.
Thật ra hầu như ta luôn luôn làm việc ấy khi viết VB.NET. Đó là vì phần lớn .NET system library được viết bằng C#, nhưng ta dùng hay thừa kế từ nó thường xun trong VB.NET.
Tạo một VB.NET BaseClass
Trong thí dụ về thừa kế từ một ngơn ngữ khác, trước hết ta thử tạo một Class Library Project trong VB.NET tên vblib và thêm vào đó một class đơn giản tên Parent giống như sau:
Public Class Parent Public Sub SayHello()
MsgBox("Hello from Parent Class", MsgBoxStyle.Information, "Parent Class in VB.NET") End Sub
End Class
Ta sẽ dùng Parent làm BaseClass để thừa kế thành một SubClass trong C#.
Tạo một C# SubClass
Dùng File | Add Project để thêm một C# Class Library project mới và đặt tên nó là cslib. Reference vblib bằng cách dùng Menu command Project | Add Reference... và chọn Tab Projects, click Browse để tìm vblib.dll trong vblib\bin subfolder.
Lưu ý là ta vừa mới reference vblib.dll, cái assembly của Class Parent, chớ ta không đụng đến hay cần VB.NET source code của Class Parent. Trong C#, ta sẽ thừa kế Class Parent qua reference BaseClass trong vblib.dll assembly.
Bây giờ code C# như sau:
namespace cslib {
using System.Windows.Forms; using vblib;
public class cSharpclass : Parent {
public cSharpclass() {
MessageBox.Show("Instantiating cSharpclass object, inheriting VB.NET Parent class", "CSharp Class");
} } }
Code C# bên trên có nhiều điểm tương đồng với VB.NET. Tuy nhiên vì C# đến từ ngơn ngữ lập trình C và C++ nên nó có syntax hơi khác một chút:
Mọi statement trong C# phải chấm dứt bằng dấu ; để đánh dấu cuối hàng
Cặp dấu ngoặc cong queo { .. } được dùng để đánh dấu đầu và cuối của một Statement Block thay vì dùng End Sub.
Keyword using được dùng thay vì keyword Imports trong VB.NET
C# thì case sensitive, tức là phân biệt chữ hoa, chữ thường - thí dụ obj thì khác với
Obj.
Constructor method mang cùng tên với class thay vì tên New như trong VB.NET.
Ta hãy thử đi qua các dòng code. Câu thứ nhất định nghĩa namespace cho source file. Trong C#, mọi namespace phải được tuyên bố rõ ràng (explicitly declared) trong mỗi code module.
namespace cslib
using System.Windows.Forms; using vblib;
Câu kế đó tuyên bố cSharpclass thừa kế từ class Parent, để ý cách dùng dấu : thay vì keyword
Inherits:
public class cSharpclass : Parent
Sau cùng là Constructor dùng chính tên của class:
public cSharpclass() {
MessageBox.Show("Instantiating cSharpclass object, inheriting VB.NET Parent class", "CSharp Class");
}
Để ý cách dùng MessageBox.Show giống hệt như trong VB.NET để hiển thị một message.
Tạo một program Client
Dùng menu command File | Add Project để thêm một VB.NET Windows Application project mới cho solution. Trong project mới nầy ta dùng menu command Project | Add Reference... để thêm references cho cslib và vblib. Right-click lên project trong Solution Explorer và chọn nó làm Set As Startup Project để project nầy chạy khi ta bấm F5.
Bây giờ đặt một Button tên BtnStartDemo lên Form và viết code dưới đây để xử lý Event Click:
Private Sub BtnStartDemo_Click( ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles BtnStartDemo.Click Dim objCS As New cslib.cSharpclass()
objCS.SayHello() End Sub
Khi ta chạy program và click button StartDemo ta sẽ thấy một dialog cho biết Constructor của cSharpclass đang được gọi để instantiate object objCS:
hình 3.15 : một program Client
Tiếp theo đó một dialog thứ nhì hiển thị message từ Sub SayHello mà objCS thừa kế từ BaseClass Parent:
hình 3.16 : hiển thị message từ Sub
Thừa kế hình ảnh (Visual Inheritance)