300 likes | 495 Views
Công nghệ NET Tổng quan .NET Frameword + WebForm. Chương 1: Giới thiệu công nghệ .NET. Nội dung chính. Lịch sử .NET Thành phần của công nghệ .NET Kiến trúc NET Framework Các tính n ă ng mới. .NET Framework. . NET 4.5 (Aug-2012) VS.NET 2012
E N D
Nội dung chính • Lịch sử .NET • Thành phần của công nghệ .NET • Kiến trúc NET Framework • Các tính năng mới
.NET Framework .NET 4.5 (Aug-2012) VS.NET 2012 Default: Windows 8, Windows Server 2012 .NET 3.5 (Nov-2007) VS.NET 2008 Default: Windows 7 .NET 4.0 (Apr-2010) VS.NET 2010 .NET 2.0 (Nov-2005) VS.NET 2005 .NET 3.0 (Nov-2006) Default: Windows Vista, Server 2008 .NET 1.1 (Apr-2003) VS .NET 2003 Default: Server 2003 .NET 1.0 (Feb-2002)
.NET Framework • Bộ khung phát triển ứng dụng; • Bốn ngôn ngữ chính:C#, VB.NET, C++.NET, Jscript.NET • Common Language Runtime – CLR (.NET Runtime): tương tự máy ảo Java • Bộ thư viện Framework Class Library - FCL
Nội dung chính Nhắc lại & Bổ sung thêm một số kiến thức cần thiết về C#: • Từ khóa var - Anonymous Type • Optional & Named Parameters (Fuction) • Object Initialize, Automatic Properties, Extension Method (OOP) • Generic (Function, Collection & Class)
Từ khóa var - Anonymous Type • Mục đích: để khai báo biến (trong phạm vi hàm, phương thức) • Yêu cầu: phải khởi tạo giá trị khi khai báo. • Kiểu dữ liệu: ngầm định kiểu dữ liệu của biến là kiểu của biểu thức bên phải phép gán. • Ví dụ: var s = 0;//s kiểu int s = “hienlth”;//báo lỗi, không chuyển từ string sang int được.
Optional & Named Parameters • Optional Parameters: Tham số mặc định • Dùng trong trường hợp người dùng không truyền tham số (giống C++) • Phải truyền đúng thứ tự. Tham số mặc định phải truyền từ phải sang trái, liên tục nhau. • Named Parameters: Tham số được đặt tên • Có thể đổi thứ tự các tham số • Ví dụ: static void Test(int size, string name){ …} Test(name: "Perl", size: 5); Test(6, "Net"); Test(7, name: "Google");
Object Initialize, Automatic Properties • Object Initialize. Ví dụ: • Diem dinhA = new Diem(); dinhA.X = 10; dinhA.Y = 10; • Diem dinhB = new Diem() { X = 10, Y = 20 }; • var dinhC = new { X = 9, Y = 11}; • Automatic Properties: • Tự động tạo ra các private field và những thao tác get/set mặc định. • Ví dụ: public string LastName { get; set;}
Extension Method • Extension Method • phương thức được viết thêm vào một class static hiện có mà không cần một cấp thừa kế, biên dịch lại, hoặc sửa đổi mã nguồn gốc • được viết dưới dạng hàm tĩnh (static) • Ví dụ:public static string doisangchuhoa(this string s){ return s.ToUpper();} • //Sử dụng:s.doisangchuhoa();
Nội dung • Định nghĩa generic • Phương thức generic • Lớp generic • Ủy nhiệm hàm generic • Giao diện generic • Phép ràng buộc
Generic là gì? • Generics, một tính năng mới đã được thêm vào từ C# 2005 cho thiết kế các class. • Tính năng này cho phép tái sử dụng mã lệnh đặc biệt trong lĩnh vực tập hợp (collection)
Phương thức generic • Sử dụng một hoặc nhiều tham số kiểu tùy ý sau tên của phương thức. VD: void MyMethod<T>(T var1, T var2,…) • Tham số kiểu có thể được sử dụng trong các tham số của phương thức hoặc bên trong phần thân của phương thức. • Ví dụ: phương thức generic hoán đổi 2 biến kiểu T: void Swap<T>(ref T var1, ref T var2) { T temp; temp = var1; var1= var2; var2= temp; }
Lớp generic • Cú pháp khai báo một class generic: class MyClass<T> Trong đó T là tham số kiểu • Khi thể hiện cụ thể lớp đó, bạn thay thế tham số kiểu bằng một đối số kiểu (type argument) • Ví dụ: MyClass<string> class1= new MyClass<string>(); MyClass<int> class2= new MyClass<int>();
Lớp generic • Tham số kiểu có thể được sử dụng bên trong lớp để định nghĩa các thành viên. public class Couple<T, E> { public T elementA; public E elementB; public Couple(T inA, E inB) { elementA = inA; elementB = inB; } } Couple<string, int> couple = new Couple<string, int>(”Age”, 29); Khi đó: couple.elementA sẽ có kiểu string nhận giá trị “Age” couple.elementB sẽ có kiểu int nhận giá trị 29.
Nạp chồng phương thức generic • Các phương thức generic có thể được nạp chồng dựa vào chữ ký hoặc số các tham số kiểu trong một phương thức. • Bạn có thể nạp chồng các phương thức generic và không generic cùng tên nếu các phương thức khác nhau trong các tham số kiểu. void MyMethod<U>(){…} void MyMethod<U,V>(){…} void MyMethod(){…}
Sử dụng từ khóa mặc định • Nếu không biết trước việc kiểu mà bạn đang tạo sẽ là một kiểu tham chiếu hay tham trị. Khi sử dụng giá trị mặc định sẽ gặp một số vấn đề: • Giải quyết: sử dụng từ khóa default void MyMethod<T>(T var) { var =null; } Báo lỗi void MyMethod<T>(T var) { var = default(T); }
Các phép ràng buộc • Khi bạn thể hiện cụ thể class bằng việc sử dụng một đối số kiểu không tuân thủ các quy tắc trình biên dịch sẽ thông báo lỗi. • Các quy tắc đó được gọi là phép ràng buộc. • Để khai báo ràng buộc, sử dụng từ khóa Where
Ủy nhiệm hàm generic • Có thể tạo ủy nhiệm hàm generic sử dụng các tham số kiểu riêng của nó. delegate void MyDelegate<T1,T2>(T1 id, T2 name); • Phương thức được đóng gói có thể là một phương thức không generic public void MyMethod(int id, string name){…} • Khi thể hiện cụ thể ủy nhiệm hàm, phải cung cấp các đối số kiểu MyDelegate<int, string> d = new MyDelegate<int,string> (mc.MyMethod);
Ủy nhiệm hàm generic • Bạn cũng có thể tạo ủy nhiệm hàm sử dụng các tham số kiểu của class đóng gói. class MyClass<T1,T2> { delegate void MyDelegate<T1,T2>(T1 id, T2 name); } //khi thể hiện cụ thể MyClass<int,string> mc = new MyClass<int, string>(); MyClass<int,string>.MyDelegate d = new MyClass<int,string>.MyDelegate(mc.MyMethod);
Giao diện generic • Khai báo giao diện generic tương tự như khai báo class generic. • Khi thực thi giao diện generic bạn phải tuân thủ các quy tắc giống như kế thừa từ class generic interface MyInterface<T> interface YourInterface<U> interface MyInterface<T1,T2> //Kế thừa giao diện class MyClass: MyInterfac<double>{…}
Ưu điểm của generic • Các phần tử không cần phải boxing khi được thêm vào hoặc casting khi được truy tìm. • Loại bỏ nhiều hao phí lập trình. • Mã generic dễ đọc và dễ bảo trì hơn. • Cung cấp một thực thi mã mẫu có thể tái sử dụng
Hạn chế của generic • Không thể sử dụng phương thức Main generic • Các thuộc tính, indexer và attribute không thể generic • Không thể sử dụng các kiểu generic trong mã không an toàn • Các phương thức toán tử không thể là những phương thức generic.