« Home « Kết quả tìm kiếm

Dot Net-Bài 7-Những chức năng Đối Tượng mới của VB.NET (phần IV)


Tóm tắt Xem thử

- Những chức năng Đối Tượng mới của VB.NET (phần IV).
- Dùng OO trong VB.NET.
- Mặc dù Object rất hiệu năng và hữu ích, có khi ta chỉ muốn truy cập các variables hay methods của một class để làm việc mà không cần phải instantiate một Object nào cả.
- Shared Methods.
- Trong VB.NET chẳng những một Class có các methods và properties thông thường như ta đã thấy ­ tức là những methods và properties của một Object ta có thể dùng ngay sau khi Object ấy thành hình qua quá trình instantiation ­ mà còn có các .
- methods và properties ta có thể dùng mà không cần phải tạo ra một instance nào từ Class.
- Ta không thể truy cập một shared method qua một Object như method bình thường, nhưng phải dùng trực tiếp tên của class.
- Public Class Math.
- Sau khi định nghĩa Class Math, ta có thể dùng Shared Function Add mà không cần instantiate một Object thuộc class Math như sau:.
- Để ý thay vì dùng một object variable ta dùng thẳng tên của class Math để truy cập method Add.
- Ta cũng có thể overload shared methods, tức là có thể code nhiều shared methods với cùng một tên nhưng có những parameter lists khác nhau..
- Tuy nhiên ta có thể giới hạn việc truy cập chúng bằng cách dùng những Access Modifiers như Friend, Protected hay Private.
- Thật ra khi overloading một shared method ta có thể dùng những scopes khác nhau cho mỗi shared method..
- Có một thí dụ về shared method từ .NET system class libraries.
- Function, nó mở input text file words.txt và cho ta một object loại StreamReader tên inFile để ta dùng sau đó.
- Đôi khi ta muốn tất cả objects của cùng một class đều dùng chung một variable.
- Ta có thể thực hiện việc ấy với shared variables..
- Public Class MyCounter.
- Ta có thể cho shared variable một scope Public hay Private tùy ý, nhưng By Default, scope của shared variables là Private, khác với shared methods thì By Default là Public..
- Điểm quan trọng của shared variables là chúng được dùng chung giữa mọi instances (objects) của cùng một class.
- Bất cứ lúc nào ta cũng có thể biết có bao nhiêu objects đã được tạo ra bằng cách đọc property Count:.
- End Sub.
- Protected Sub Button1_Click( ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click.
- Bạn có thể Download source code của program nầy tại đây.
- Thí dụ như:.
- Sau đó ta có thể dùng variable nầy khắp nơi trong client code:.
- VB.NET không hổ trợ Events từ đời cha đến đời con theo đúng nguyên tắc thừa kế.
- Nếu một BaseClass định nghĩa một Public Event thì ta chỉ có thể raise event ấy trong code của BaseClass thôi chớ không thể raise event ấy trong SubClass nào của BaseClass ấy..
- Khác với methods, ta không thể overload một Event, tức là không thể dùng một tên .
- Ta có thể tạo một Class Library Project với một Class trong đó có raise một Event rồi tạo một project khác trong đó có code để đón nhận và xử lý Event ấy..
- Để thử việc nầy bạn hãy tạo một Class Library Project mới với tên ClassLibrary1 về viết những dòng code định nghĩa Class Class1 với Event TheEvent và Sub .
- Public Class Class1.
- Public Event TheEvent() Public Sub LàmVi c() ệ RaiseEvent TheEvent() End Sub.
- Để có thể dùng Class1, bạn cần phải reference nó với Menu command Project | Add Reference.
- Một khi đã referenced ClassLibrary1 với Class1 trong ấy, bây giờ bạn có thể doubleclick lên Form1 để code như sau:.
- Private Sub Form1_Load( ByVal sender As System.Object,.
- ByVal e As System.EventArgs) Handles MyBase.Load obj = New ClassLibrary1.Class1().
- Private Sub BtnLàmVi c_Click( ệ ByVal sender As System.Object,.
- ByVal e As System.EventArgs) Handles BtnLàmVi c.Click ệ.
- obj.LàmVi c() ệ End Sub.
- Bây giờ bạn có thể chạy program.
- Khi bạn click Button BtnLàmViệc program sẽ hiển thị message để chứng minh rằng từ một Application ta có thể handle event trong Class của một Project khác..
- Bạn có thể Download source code của program nầy tại đây..
- như trong hình dưới đây:.
- Events có thể được declared là Shared.
- Shared methods chỉ có thể raise shared events, chúng không thể raise non­shared events.
- Một shared event có thể được raised bởi cả shared methods lẫn non­shared methods:.
- Nó cho phép IntelliSense hiển thị cho ta thấy những class members nào ta có thể dùng và compiler kiểm xem những methods ta dùng có hiện hữu không.
- Ngược lại Late Binding có nghĩa là ta làm việc cách linh động với một Object lúc run­.
- By Default, mọi objects trong VB.NET đều là Late Bound.
- Visual Studio.NET IDE với Option Strict Off by default áp đặt luật đó.
- Ta có Late Binding khi compiler không thể xác định loại Object ta đang gọi.
- Ta có thể thực hiện điều nầy bằng cách dùng Object Type để tuyên bố một cách mơ hồ rằng ta sẽ dùng một loại Object nào đó, vì một variable với Object type có thể hold­reference­.
- to bất cứ một Object nào.
- Do đó, những dòng code sau đây có thể được dùng cho bất cứ Object nào mà Class của nó có implement Sub CôngTácTôi và không dùng parameter nào cả:.
- End Sub End Module.
- 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.
- Binding, .NET đã tử tế lo lắng chuyện ấy một cách tự động cho chúng ta..
- 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.
- Public Sub LàmVi c( ệ ByVal obj As Object) CType(obj, TheClass).CôngTácTôi() End Sub.
- 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..
- 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 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:.
- 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.
- 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:.
- 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#.
- Dùng File | Add Project để thêm một C# Class Library project mới và đặt tên nó là cslib.
- 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ế .
- using System.Windows.Forms;.
- 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.
- Keyword using được dùng thay vì keyword Imports trong VB.NET .
- Constructor method mang cùng tên với class thay vì tên New như trong VB.NET.
- Kế đó là hai câu tuyên bố ta nhập khẩu System.Windows.Forms và vblib:.
- Câu kế đó tuyên bố cSharpclass thừa kế từ class Parent, để ý cách dùng dấu : thay vì keyword Inherits:.
- Để ý cách dùng MessageBox.Show giống hệt như trong VB.NET để hiển thị một message.
- Dùng menu command File | Add Project để thêm một VB.NET Windows Application project mới cho solution.
- Private Sub BtnStartDemo_Click( ByVal sender As System.Object,.
- ByVal e As System.EventArgs) Handles BtnStartDemo.Click.
- 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 đến bây giờ ta đã bàn qua chức năng OO của ngôn ngữ VB.NET, phần lớn nhắm vào đặc tính thừa kế..
- Vì các hình ảnh (Visual Components) trong VB.NET được implemented bằng ngôn ngữ lập trình chính quy chớ không phải dùng một cách thức khác biệt như trong VB6 (tin tức diễn tả các hình ảnh nằm ở phần đầu các *.frm files), nên VB.NET cũng hổ trợ Thừa kế hình ảnh (Visual Inheritance) cho Windows Forms một cách tự nhiên.
- ta có thể thừa kế nó rồi để vô thêm các hình ảnh khác.
- Ta cũng có thể thừa kế từ chính các hình ảnh.
- Thí dụ ta có thể thừa kế từ một Textbox để tạo ra một class Textbox mới, có thêm chức năng nhận keystrokes theo cách VNI và hiển thị chữ Việt Unicode..
- Cùng một nguyên tắc thừa kế nầy của Windows Forms Controls cũng áp dụng cho Web Forms Controls, tức là ta có thể SubClass một Web Forms Control, cho thêm các chức năng mới và overriding một số chức năng có sẵn

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt