1. Trang chủ
  2. » Công Nghệ Thông Tin

Dạng bài tập về Micosoft.NET- P22 doc

5 271 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

Các bài tập Microsoft .NET 106 .NET framework hổ trợ một ý niệm gọi là reflection. Nó nói đến khả năng của program kiểm tra .NET code để biết trong code có những thứ gì. Ta dùng namespace System.Reflection để viết code làm chuyện ấy. Với System.Reflection ta có thể viết code để khám phá những classes nằm trong một assembly, để biết mỗi class có những methods, properties và events nào. Tiếp theo đó, ta có thể dùng reflection để instantiate và dùng những objects từ các classes ấy. Cả quá trình này hoàn toàn linh động - giống hệt như Late Binding. Thật ra, CLR (Common Language Runtime) dùng reflection để implement Late Binding dùm cho chúng ta. Thay vì bắt chúng ta phải tự dùng reflection để code Late Binding, .NET đã tử tế lo lắng chuyện ấy một cách tự động cho chúng ta. Dùng Function CType Dầu ta có dùng Late Binding hay không, nhiều khi rất tiện để ta pass reference đến một object nào đó, từ chỗ này đến chỗ khác, bằng cách dùng Data Type Object tổng quát - khi nào cần dùng nó thì ta đổi nó ra đúng loại Object trong hoàn cảnh. Ta thực hiện việc convert data type bằng cách dùng Function CType, điều đó cho phép ta nói trước Data Type Object sẽ được converted ra object của class nào để gọi một method theo cách Early Bound: Module LateBind Public Sub LàmViệc( ByVal obj As Object) CType(obj, TheClass).CôngTácTôi() End Sub End Module Trong thí dụ trên dù rằng ta đang làm việc với variable thuộc type Object - trên nguyên tắc thì có vẽ là Late Bound - nhưng chúng ta đang dùng Function CType để convert obj ra một object thuộc class TheClass. Kỹ thuật này được gọi là casting (đổ khuôn). Nếu ta xem TheClass như một cái khuôn, khi ta ép obj vào khuôn ấy thì giống như đổ khuôn để cho obj có dạng của TheClass. Function CType rất hữu dụng khi ta làm việc với những objects có implement nhiều interfaces, vì ta có thể dùng cùng một object cho những Các bài tập Microsoft .NET 107 interfaces khác nhau. Giả dụ như ta có một object thuộc loại TheClass và nó cũng có implement một interface tên MyInterface, ta có thể dùng interface ấy trong code sau đây: Dim obj As TheClass obj = New TheClass CType(obj, MyInterface).DoSomething() Theo cách trên ta có thể gọi methods theo cách Early Bound trong nhiều interfaces của một object mà không cần phải declare một variable mới. Thừa kế từ một ngôn ngữ khác VB.NET code được compile ra IL (Intermediate Language) managed code, tức là code sẽ được 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 xuyên 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#. Các bài tập Microsoft .NET 108 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. Các bài tập Microsoft .NET 109 • 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 Kế đó là hai câu tuyên bố ta nhập khẩu System.Windows.Forms và vblib: 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. Các bài tập Microsoft .NET 110 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: Tiếp theo đó một dialog thứ nhì hiển thị message từ Sub SayHello mà objCS thừa kế từ BaseClass Parent: Thừa kế hình ảnh (Visual Inheritance) . để cho obj có dạng của TheClass. Function CType rất hữu dụng khi ta làm việc với những objects có implement nhiều interfaces, vì ta có thể dùng cùng một object cho những Các bài tập Microsoft. Các bài tập Microsoft .NET 106 .NET framework hổ trợ một ý niệm gọi là reflection. Nó nói đến khả năng. End Sub End Class Ta sẽ dùng Parent làm BaseClass để thừa kế thành một SubClass trong C#. Các bài tập Microsoft .NET 108 Tạo một C# SubClass Dùng File | Add Project để thêm một C# Class Library

Ngày đăng: 08/07/2014, 08:20

TỪ KHÓA LIÊN QUAN

w