Tổng quan VB.Net

Chia sẻ: Nguyễn Xuân Nguyên | Ngày: | Loại File: DOC | Số trang:11

0
191
lượt xem
71
download

Tổng quan VB.Net

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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

Chủ đề:
Lưu

Nội dung Text: Tổng quan VB.Net

  1. 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 http://www.saurik.com/net/exemplar/ http://www.aisto.com/roeder/dotnet - 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 , Long.. các kiểu như Ulong ,Uinteger .. xuất hiện từ VB2K5 không phải là kiểu chuẩn do vậy sẽ gặp khó khăn Khi chuyển đổi sang ngôn ngữ khác cũng như tương tác với API Quá trình thực thị .NET: .NET Executable File ( MetaData + IL Code )
  2. § Hệ thống máy ảo CLR Class Loaders   JIT Complier VERIFIER JIT II..NET cơ bản 1.Các kiểu dữ liệu ,từ khoá.. không còn hỗ trợ Currentcy  Thay bằng Double hay Variant  Thay bằng object Fixed lenght String EQU IMP Doevents  System.Windows.Forms.Application.Doevents Empty IsMissing Mid … 2.Các kiểu dữ liệu mới( hay có thay đổi) VB 6.0 Long  ____ Integer  Long Short  Integer Char  ____ Thông tin : Kiểu Char có kích cỡ 1 byte kí hiệu = “c” nhanh gọn hơn nhiều so với string Ulong  ____ String 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)
  3. Đọ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 Public Function Draw() RaiseEvent DrawAction() End Function Event DrawAction() End Structure OrElse ___ Tương tự OR nhưng nếu 1 toán hạng trả về kết quả đã quyết định toàn bộ biểu thức thì không cần tính tiếp các toán hạng sau nữa AndAlso ___ Tương tự AND nhưng nếu 1 toán hạng trả về kết quả đã quyết định toàn bộ biểu thức thì không cần tính tiếp nữa Optional Các tham số khai báo optional phải luôn được gán giá trị khởi tạo Phép chia lấy phần dư ( MOD) với số thực math.IEEERemainder( 11.2,4.2) isnot  Is ( Not ) + các hàm chuyển đôi kiểu : Directcast : Dùng đỏi 2 đối tượng cùng kiểu, 2 đối tượng có thể đổi cho nhau như string  long nhưng khác kiểu sẽ bị báo lỗi . Ctype : Đổi hai đối tượng khác loại nhưng có thể đổi được , không đổi được lỗi Ví dụ : CType(“123”, string ) Báo lỗi : CType (“123SSSA”,long) Thông tin : Thực chất Ctype chuyển giá trị cần đổi sang một kiểu trung gian ( string) rồi convert về kiểu đich Trycast : Tương tự DirectCast nhưng trả về nothing nếu có lỗi + gettype : Trả về kiểu của đối tượng + TypeOf + Is + Mảng ( array ) và chuỗi ( String ) được tham chiếu chứ không phải tham trị Khai báo mảng rỗng : Dim X(-1) as long
  4. 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 Return So1 / so2 End Function + Các cấu trúc Giải phóng bộ nhớ Using x As New AnyObject End Using  Có thể dùng kép : Eg : Using sr As New StreamReader(inFile), sw As New &_ StreamWriter(outFile), & _ sw.Write(sr.ReadToEnd().ToLower()) End Using Thông tin: Khi dùng Using & End Using , đối tượng sẽ được giải phóng tức thì chứ không phải đợi GC + Hỗ trợ DOCK & ANCHo Hai thuộc tính mới trong control cho phép các điều khiển tự co dãn hay giữ nguyên vị so với các container của nó  tiết kiệm công sức 4. Các cú pháp mới + Khai báo biến thuận tiện hơn Eg: Dim X,y,z as long  Dim X as long : Dim y as long ….
  5. + Biến được khởi gán : Eg: Dim X as long =1 Dim Y(3) as long = {1,2,3} + X +=1  X = X+1 X - =1  X = X -1 X*= 1  X=X*1 >>  Dịch bít phải có dấu Vb sẽ sinh ra như sau ''' ''' ''' ''' ''' '''
  6. 3.Các chỉ thị biên dịch (Attributes) Là mớ thông tin để cho CRL biết những việc cần hành xử với một hay vài modul, classs.. lúc runtime Các trình biên dịch trở về trước thường có riêng các chỉ thị biên dịch để tối ưu mã lệnh mà không ai giống ai, từ vb.net 2003, microsoft đã bó các chỉ thị biên dịch này vào các CLASS để dễ dàng mở rộng.Các chỉ thị biên dịch bắt đầu “ < >” Ngoài tác dụng là các chỉ thị biên dịch ,Microsoft đã mở rộng Attributes thành các lớp để mô tả code, tài liệu…..Các atrributives này không nằm trong EXEC CODE của chương trình mà ẩn sau các METADATA của các ASSEMBLLY Muốn dùng các chỉ thị biên dịch cần imports class Imports System.Runtime.CompilerServices imports System.ComponentModel Ví dụ : Với các thủ tục hay hàm chỉ có một đến vài lệnh có thể tối ưu bằng cách bật chỉ thị inline mode cho phép CRL chèn code trực tiếp chứ không cần phát sinh lời gọi hàm CALL nhăm tăng tốc độ thi hành, thông thường khi gọi hàm : Function Eval(ByVal n1 As Integer, ByVal n2 As Integer) As Integer Return n1 \ n2 End Function Ví dụ: X = eval(22,10) .Net sẽ chèn thẳng : X =22 \10 Nếu tắt inline đi chèn thêm dòng dưới vào trước sub, hay fun _ Function Eval(ByVal n1 As Integer, ByVal n2 As Integer) As Integer Return n1 \ n2 End Function ‘ Chỉ thị làm .NET xem Enum dưới như là một BitCode 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ể
  7. Mềm dẻo hơn. 2. Hỗ trợ default property ( bắt buộc phải có tham số) Default Public Property Addresses(ByVal index As Integer) As String End Property 3. Các Constructor cho phép Overload đồng thời hỗ trợ nhiều tham số 4. Share Function & Sub Các thủ tục hay hàm trong class có thể được đăng ký SHARE để các lớp khác có thể truy xuất Thông thường để dùng 1 public sub trong class ta khai báo : Dim X as anyClass X.AnySub Nếu anySub được khai báo là SHARE ta có thể gọi anySub mà không cần tạo 1 lớp nào Eg : AnyClass.AnySub Thông tin : - Các property được khai báo public & share chạy chậm hơn các private 30% - Các share Function & sub không thể truy nhập vào các biến public của class - Thục tế các module chính là các lớp mà các hàm & thủ tục được khai báo là shared + bỏ thừa kế 5.Shared propery Các Property được khai báo là Shared sẽ được chép lên vùng PUBLIC do đó có thể bị thay đổi bởi các instance của các class , các instance của 1 class có thể dùng các biến share để trao đổi thông tin cho nhau. 6. Parital Class ( class bị phân lớp) Từ khoá này chỉ có từ Vb 2k5 cho phép 1 class có thể được chứa trong 2 hay nhiều file .VB Thông thường VB tự sinh thêm 1 parital class đối với các đối tượng FORM hay control để chứa các lệnh khởi tạo tự sinh để đỡ làm rối mắt programer ( các file nay thường bị ẩn ) 7.Operator over loading ( chỉ có từ VB2k5 ) Các từ khoá +,- And… có thể được overloading ( đối với các structure, Class) 8. Hỗ trợ Delegate Delegate còn gọi là kiểu thủ tục chính là cách gọi 1 thủ tục mà địa chỉ được lưu vào một biến con trỏ chứ không phải tên thủ tục do vậy trong một số trường hợp tạo lên sự linh động và mềm dẻo cho code , ở Vb.NET dùng delegate rất an toà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
  8. 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 Function GetChildControls(ByVal parent As Control) As ArrayList Dim result As New ArrayList() For Each ctrl As Control In parent.Controls result.Add(ctrl) result.AddRange(GetChildControls(ctrl)) Next Return result End Function 10. Cho phép nestesed Class ( chồng lớp ) Vb.NET cho phép khai báo định nghĩa 1 hay nhiều class và cả các interface trong class khác, do vậy tăng khả năng đóng kin( encapsualation) Class Outer … Class Inner … End Class End Class Để tạo 1 instance Inner ta code: Dim ClsInner As New outer.Inner Thông tin: Với VB 6.0 phải khai báo Inner class ở modul khác, sau đó tạo 1 đối tương cls inner trong outer 11. Kế thừa VB.Net chỉ hỗ trợ kế thừa từ một class thông qua từ khoá INHERITES ,cho phép class con được quyền Overiding các sub, property của class cha Các từ khoá mới : MyBase : Truy cập vào lớp class cha MyClass : Truy cập vào class hiện thời, dùng trong trường hợp cần sub hay function nguyên gốc của class ( không phải các sub, f đã bị overriding ). Me : Dùng với tất cả đối tượng,truy cập đối tượng hiện thời Thông tin : 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.
  9. 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ẽ chuyễn int về Double dễ gây bug ), cho dù có dùng overload thì cũng mất thời gian, do vậy .NET cung cấp kiểu generic cho phép ta chỉ cần dùng 1 thủ tục là đủ giảm thời gian lập trình: Ví dụ : ta có mẫu Sub Swaps(Of T)(ByRef So1 As T, ByRef So2 As T) Dim temp As T temp = So1 So1 = So2 So2 = temp End Sub Thủ tục swaps trên có thể áp dụng cho mọi kiểu dữ liệu thay vì phải viết hàng chục modul swap : eg : swapInt, SwapDate,SwapLong… ví dụ : Swaps(Of Long)(11, 222) Swaps(Of Date)(date1, date2) Thông tin ; Đương nhiên ta có thể dùng kiểu object hay VARIANT của VB6 nhưng như vậy sẽ chậm do kiểu phải qua 1 lần convert ,dễ gây bug , hơn nữa kiểu generic còn được hỗ trợ mạnh khi viết các CLASS năng động chấp nhận rất nhiều loại thông tin đầu vào không chỉ dừng ở các kiểu cơ bản như long, int, string mà còn các kiểu UDT 14. Các thông tin khác Vb.Net cho phép các UDT, các cấu trúc khác như array cũng được khai báo PUBLIC trong class do vậy làm CLASS linh động hơn rất nhiều. B.Các đối tượng mới trong VB.NET 1. Đối tượng Objects trong .NET Các kiểu dữ liệu trong .Net đều khởi phát từ đối tượng này : gồm các thủ tục và hàm chuẩn : + Equals : Trả về true nếu giá trị của đối tượng = giá trị đầu vào + GetHashCode : Trả về mã ID của đối tượng + ToString : Trả về tên của đối tượng dạng chuỗi + GetType : trả về kiểu dữ liệu + ReferenceEquals : Trả về true nếu 2 đối tường đầu vào cùng trỏ đến 1 địa chỉ 2.String
  10. 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 Tương tự Timer dùng để đo thời gian thi hành ứng dụng 6. Threads lập trình đa luồng Not Available yet 7. Serialization Not Available yet Danh mục các NameSpaces : System.CodeDOM Bao gồm các CLASS xử lý các phần tử và cấu trúc của mã nguồn. System.ComponentModel Tựa như các hướng dẫn biên dịch lúc thiết kế và lúc chạy cho các điều khiển & các thành phần (COM) System.Configuration Hỗ trợ việc tạo các trình cài đặt tuỳ chọn cho thành phần phần mềm System.Data Bao gồm các CLASS cấu thành lên kiến trúc ADO.NET sử dụng cho việc kết nối CSDL System.Diagnostics Hỗ trợ gỡ rối và dò lỗi System.DirectoryServices Truy cập Active directory từ các managed code. System.Drawing Truy nhập các hàm đồ hoạ gồm các lớp con
  11. System.Drawing.Drawing2D, System.Drawing.Imaging, and System.Drawing.Text namespaces. System.Net Cung cấp các cách thức truy cập mạng như FTP and HTTP. Ngoài ra còn có các cách truy cập bậc thấp như WinSock: The System.Net.Sockets System.Reflection Gồm các lớp và mẫu lớp (interfaces ) quản lý , liệt kê các phương thức, thuộc tính , assembllies của .NET System.Resources Bao gồm các CLASS quản lý file RESOURCE 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

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản