Tổng kết( Tóm lược ) về VB.NET
Cập nhật ngày 08/07/2006 ( xin đọc từ đầu )
I. Đặc trưng .NET
1. Ưu điểm :
- Phát triển ứng dụng nhanh, dễ dàng bảo trì & phát triển
- Chạy ổn định ít bị BUG, CRASH
- Thích hợp cho phát triển wed và các ứng dụng chủ khách nhiều tầng cũng như CSDL
- Dễ dang cài đặt không còn bị DLL Hell
2.Nhược điểm
- Đòi cấu hình mạnh ( CPU : > 1000MHZ, RAM >= 256 MB )
- Dễ bị dịch ngược và crack vì tất cả đều là mã mở do phải dich sang ngôn ngữ trung gian IL
Công cụ:
- Dịch ra IL
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ILDASM.exe
- Dịch từ IL về c# & VB.NET
/> /> - Dịch trực tiếp ra mã máy native code :
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ngen.exe
3. Các thuật ngữ mới trong .NET
IL : Intermediate Language : Ngôn ngữ trung gian tựa mã máy được sinh ra trong quá trìng chạy
.NET EXE FILE
Assembly : Được hiểu như là một thành phần COMPONENT trên VB, .NET được cấu thành từ gần 5000
ASSEMBLY
MetaData : Được hiểu như là các mẫu dữ liệu chứa thông tin về các dữ liệu của chương trình ví dụ như
version, format, type… ( DATA about DATA ), giao diện địng nghĩa dữ liệu .
CRL : Common Language Runtime : Là hệ thống máy ảo tựa JAVA để dịch source ra IL Điểm mạnh của
.NET là hỗ trợ đa ngôn ngữ do dùng một giao diện chung cho một kiểu dữ liệu như : SYSTEM.OBJECT &
SYSTEM.INT32, ngoài ra CLR còn dùng các metadata để chuyển đổi, kiêm tra và thi hành các code.
JIT : Just in time Complier, trình thông dịch ra mã máy từ IL code lúc chạy, chỉ có đoạn mã cần chạy là được
dịch.
Thông tin :
Để tương thích với các ngôn ngữ khác chỉ lên dùng các kiểu dữ liệu chuẩn của CLR như Integer ,
Thông Tin :
Kiểu chuỗi trong .NET là kiểu con trỏ , không hỗ trợ chuỗi có độ dài cố định, và được tương
tác như một mảng ký tự, có thể truy cập dễ dàng thông qua chỉ số như PASCAL
( các số không dấu thêm U đằng trước- unsigned )
NulAble ____
Thông Tin :
Kiểu dữ liệu cho phếp NULL ( không chứa giá trị nào ), áp dụng trong nhiều trường hợp :
- Kiểu boolean chỉ có hai giá trị T & F nhưng chưa đủ cho nhiều trường hợp ví dụ
checkbox có thể T hay F và Disable
-Các khai báo biến optional cần phải gán trước 1 giá trị ngầm định, nhưng trong trường
hợp cả giá trị ngầm định cũng bị sử dụng thì phải dùng NullAble
Eg:
Dim X As Nullable(Of Boolean)
X.HasValue ( = TRUE có giá trị , = FALSE : NULL)
Đọc giá trị qua : X.Value
*!!!! :
Các kiểu dữ liệu cơ bản như long ,Int,byte,Short khi khai báo có thể không cần dùng NEW do vậy
Các lệnh sau tương đương :
Dim X As Long
Dim X As New Long
Dim X As Long = New Long
3. Các từ khoá,cấu trúc , lệnh mới hay có thay đổi VB 6.0
STRUCTURE TYPE
Thông Tin :
STRUCTURE có cấu trúc gần giống CLASS chỉ không kế thừa được
Trong có thể gồm cả EVENT, Property, SUB, function.Do vậy structure trong .NET rất linh động.
Eg:
Public Structure POINTAPI
Public X As Integer
Public Y As Integer
Dim X(-1) as long
Chỉ số đầu của mảng luôn bằng 0
+ Các cấu trúc lặp mới :
While < Condition>
End While
VB.NET hỗ trợ các lệnh để tiếp tục hay ngắt lặp không cần dùng GOTO như VB 6
Continue : Tiếp tục vòng lặp gần nhất
Exit : Thoát lặp gần nhất
+ Cấu trúc bẫy lỗi :
Try
Catch ex As Exception
End Try
Thông tin : các thủ tục có dùng cấu trúc bẫy lỗi chạy chậm hơn 40% so với các thủ tục không
có bẫy lỗi, hạn chế dùng trong timer và nên trả về mã lỗi hay kiểm tra điều kiện lỗi = If
Then. Không lên dùng lẫn cả cấu trúc bẫy lỗi cũ của VB 6
Ví dụ:
Hàm
Function kiemtra(ByVal So1 As Long, ByVal so2 As Long) As Long
Try
Return (So1 / so2)
Catch ex As Exception
MsgBox(" chia cho 0")
End Try
End Function
sẽ chạy chậm hơn nhiều so với hàm dưới do cứ sau 1 lệnh , vb lại phải thêm 1 lệnh kiểm tra lỗi.
Function kiemtra2(ByVal So1 As Long, ByVal so2 As Long) As Long
If (So1 = 0) Or (so2 = 0) Then
MsgBox("chia cho 0")
End If
Trong khai báo biến
Dim X + “ Ký tự đại diện “
Eg : Dim X% Dim X as integer
% Integer
$ String
& Long
# Double
! Single
@ Decimal
Trong sử dụng hằng số :
Eg :
Dim X# = 123.2D
D Decimal
R,# Double
I Integer
L Long
c Char
S Short
F Single
Ux Unsigned
Eg :
UL : unsigned long
II.Hỗ trợ ngôn ngữ & trình thông dịch CRL
1. Hỗ trợ chèn các chú thích dùng XML
Trước thủ tục cần chú thích : nhấn ’’’ < Enter> Vb sẽ sinh ra như sau
''' <summary>
'''
''' </summary>
''' <param name="Param1"></param>
''' <returns></returns>
<MethodImpl(MethodImplOptions.NoInlining)> _
Function Eval(ByVal n1 As Integer, ByVal n2 As Integer) As Integer
Return n1 \ n2
End Function
‘ Chỉ thị <Flags> làm .NET xem Enum dưới như là một BitCode
<Flags()> Enum ValidDataEntry
None = 0 ' Always define an Enum value equal to 0.
IntegerNumber = 1
FloatingNumber = 2
CharString = 4
DateTime = 8
End Enum
4.Các công cụ hỗ trợ đi kèm
IDE ( Intergrated Development eviroment ) môi trường tích hợp phát triển của .NET cung cấp khá
nhiều công cụ hỗ trợ :
Xem IL code được sinh
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe
Dịch thẳng ra native code
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ngen.exe
Xem thông tin PE .NET EXE file
C:\Program Files\Microsoft Visual Studio 8\VC\bin\dumpbin.exe
Để tiện hơn khi sử dụng , trong IDE VB.NET vào TOOLS \ EXTENAL TOOLS… chọn ADD NEW
Trong command line : paste đường dẫn, trong agrument : chọn $(TargetDir) , sau OK
5.Gỡ rối ( debug & trace ) ( ??? )
Not available yet
III. VB.NET nâng cao
A. Các đặc trưng hướng đối tượng & ngôn ngữ nâng cao mới
1. Overloading
Cho phép các thủ tục hàm được dùng cùng 1 tên ( khác tham số),do vậy các thủ tục có thể
Mềm dẻo hơn.
Eg : khai báo
Delegate Sub DisplayMessage(ByVal msg As String)
' ta có 1 sub như sau
' Display a string in the Debug window.
Sub WriteToDebugWindow(ByVal msgText As String)
Debug.WriteLine(msgText)
End Sub
Dim X as new DisplayMessage( address of WriteToDebugWindow)
X.Invoke(" String here")
9. Gán sự kiện cho nhiều đối tượng
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
Handles MyBase.Load
'Đăng ký 2 sự kiện cho tất cả điều khiển trên FORM
For Each ctrl As Control In GetChildControls(Me)
AddHandler ctrl.MouseEnter, AddressOf Control_MouseEnter
AddHandler ctrl.MouseLeave, AddressOf Control_MouseLeave
Next
End Sub
‘Khai bao c ỏc th ủ t ục s ự ki ện
Private Sub Control_MouseEnter(ByVal sender As Object, ByVal e As
EventArgs)
Dim ctrl As Control = DirectCast(sender, Control)
If Not ctrl.Tag Is Nothing Then ToolStripStatusLabel1.Text =
ctrl.Tag.ToString()
End Sub
Private Sub Control_MouseLeave(ByVal sender As Object, ByVal e As
EventArgs)
ToolStripStatusLabel1.Text = ""
End Sub
‘Ham tra ve cac dieu khien thuoc p arent
Từ khoá INHERRITS cho phép kế thừa toàn bộ từ các class cha ( trừ các property được khai báo
NotInheritAble), do vậy nếu chỉ muốn kế thừa 1 số property xác định thì không được
12.Interface
Từ khoá interface chép phép tạo 1 mẫu cho trước có tác dụng tương tự với các lớp được khai báo
MustInherit ( trừ việc không thừa kế được ), interface là 1 kiểu lớp chỉ có tên thủ tục & hàm đuợc thiết
kế trước, muốn sử dụng phải implements sau đó code .VB cũng cấp nhiều các Interface có sẵn giúp
giảm thời gian thiết kế cho programmer.
Đáng lưu ý là interface lại có thể kế thừa từ nhiều interface khác trong khi CLASS chỉ được kế
thừa từ một cha.
Ví du :
Interface INguoi
Inherits ISinhVat
Inherits IDongVat
Inherits IThucVat
Sub An()
Sub Uong()
End Interface
Muốn dùng interface Inguoi ta phải implements nó ví dụ
Class NhacSi
Implements INguoi
Public Sub AN() Implements Inguoi.AN
‘ Code Here
End Sub
End Class
13.Generic ( áp dụng nhiều cho class và structure )
Thực tế một thủ tục có thể chấp nhận tham số nhiều kiểu : chuỗi, currenty, long,…. ví dụ : thủ tục
tính toán
+,-… trong máy tính điện tử cùng 1 phép cộng phải thao tác với hàng chục kiếu dữ liệu, bình
thường ta có thể viết 10 thủ tục cộng để thao tác với 10 kiểu dữ liệu ( đương nhiên ta chỉ cần dùng 1
kiểu số là double có thể thay thế cho cả interger , real nhưng sẽ tăng thời gian thực hiện do VB sẽ
2.String
Kiểu chuỗi rất mạnh trong .NET có thể thao tác như mảng ký tự trên PASCAL. Nếu một chuỗi được
dùng lặp lại nhiều lần VB cho phép chỉ lưu 1 bản sao duy nhât của chuỗi các chuỗi tương tự về sau sẽ
trỏ đên chính địa chỉ của bản đầu tiên để tăng tốc độ thực thi.
Ví dụ :
s1 = "ABCD"
s1 &= "EFGH"
' Chuyển S1 vào bộ đêm trong
s1 = String.Intern(s1)
' gán S2 bằng 1 hằng chuỗi đã được cached
s2 = "ABCDEFGH"
' Lúc này cả hai biến có cùng địa chỉ
Console.WriteLine(s1 Is s2) ' => True
3. Array
Kiểu array trên VB được hỗ trợ thêm nhiều chức năng như lọc ,sắp xếp…
4.Regular Expressions
Kiểu đối tượng hoạt động giống với LIKE nhưng linh động hơn và phức tạp hơn rất nhiều,Có thể
thay thế nhiều đoạn mã xử lý chuỗi phức tạp chỉ bằng 1 lệnh đơn giản giảm thời gian viết code.Tuy
vậy tốc độ xử lý chậm hơn so với LIKE và châm hơn nhiêu so với dùng FOR, hay WHILE để phân
tích bù lại có thể dùng để code các trình phân tích cú pháp, chuỗi, tính toán biểu thức chỉ bằng một ít
lệnh .
Khi sử dụng cần imports
Imports System.Text
Imports System.Text.RegularExpressions
Ví dụ :
pattern = "^\d{5}$"
If Regex.IsMatch(text, pattern) Then
' Là một chuỗi gồm năm chữ số
End If
5. System Watches
System.Security
Cho phép truy cập vào các cấu trúc bảo mật của .NET Framework.
System.ServiceProcess
Hỗ trợ cài đặt và chạy Win Services( kiểu FILE chạy không có giao diện NSD )
System.Text
Bao gồm các CLASS xử lý , chuyễn đổi ASCII, Unicode, UTF-7, and UTF-8
System.Threading
Cung cấp các CLASS cho phếp lập trình đa lưồng
System.Timers
Cung cấp thành phần timer, cho phép sinh sự kiện sau thời gian xác định
System.Web
Cung cấp các dịch vụ WEB
System.Xml
Gỗm các CLASS hỗ trợ XML
C. ADO.NET
D. VSFLEXGRID.NET