Lập trình cơ sở dữ liệu C Sharp-Phần 4
lượt xem 50
download
Do ArrayList luôn cast mọi thứ về lớp cở sở Object, nên không có cách nào để kiểm tra kiểu ở thời gian biên dịch
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Lập trình cơ sở dữ liệu C Sharp-Phần 4
- Generics Generics
- ̣ Nôi dung Nôi ̀ ̉ ́ ̣ An toan kiêu luc biên dich (compile time type safety) Overloaded methods Constraints Generic Classes and Structs Generic Interfaces Generic Methods Generic Delegates Generic Type Conversion Nullable Types 2
- ̣ ̉ ̀ Type Safety (đinh kiêu an toan) Type Cac ngôn ngữ .net (C#, C++, VB..) đêu là những ngôn ngữ ́ ̀ được đinh kiêu manh (strong type) phai khai bao biên rõ ̣ ̉ ̣ ̉ ́ ́ rang trước khi sử dung. ̀ ̣ Nhưng cac kiêu tâp hợp (collection) lai không được hỗ trợ ́ ̉ ̣ ̣ kiêu an toàn( Type safety). Ví dụ kiêu ArrayList, chung cho ̉ ̉ ́ phep ta lưu trữ tât cả cac object bên trong chung. ́ ́ ́ ́ 3
- Ví dụ về an toan kiêu ̀ ̉ Vi namespace TestApp { class Test { static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(3); list.Add(4); //list.Add(5.0); int total = 0; foreach(int val in list) { total = total + val; } Console.WriteLine( "Total is {0}", total); } } } 4
- Type Safety of Generics Type Do ArrayList luôn cast moi thứ về lớp cơ sở Object, nên ̣ không có cach nao để kiêm tra kiêu ở thời gian biên ́ ̀ ̉ ̉ ̣ dich. Dung Generics sẽ loai trừ viêc upcast thanh Object và ̀ ̣ ̣ ̀ lam cho compiler có thể kiêm tra kiêu được. Nhờ đó có ̀ ̉ ̉ thể tao collection an toan kiêu ngay thời gian biên dich ̣ ̀ ̉ ̣ 55
- Compile-time type safety Compile-time Phat hiên sai kiêu dữ liêu ở thời điêm biên dich ́ ̣ ̉ ̣ ̉ ̣ Ví dụ 1: nêu Stack được dung để lưu trữ giá trị int ́ ̀ , nêu push vao 1 string thì sẽ gây lôi (compile- ́ ̀ ̃ time error). Ví dụ 2: phương thức Sort chỉ có thể săp xêp cac ́ ́ ́ phân tử cung kiêu dữ liêu. ̀ ̀ ̉ ̣ Để bao đam compile-time type safety, phai tao ̉ ̉ ̣̉ cac version kiêu khac nhau cho lớp Stack cung ́ ̉ ́ ̃ như phương thức Sort nhiêu ban copy chò ̉ ̀ ̃ cung 1 ma. 6
- Generics Generics Generics là 1 tinh chât mới cua C# ́ ́ ̉ Generic methods enable you to specify, with a single method declaration, a set of related methods. Generic classes enable you to specify, with a single class declaration, a set of related classes. Generic interfaces enable you to specify, with a single interface declaration, a set of related interfaces. Generics provide compile-time type safety. 7
- Generic Generic ́ ̣ ̉ ̀ Generic cho phep đinh kiêu an toan (type safety). Cho phep tao ra môt câu truc dữ liêu mà không cân phai ́ ̣ ̣ ́ ́ ̣ ̀ ̉ xac đinh đó là kiêu dữ liêu gi. ́ ̣ ̉ ̣ ̀ Tuy nhiên khi câu truc dữ liêu nay được sử dung, trinh ́ ́ ̣ ̀ ̣ ̀ biên dich phai đam bao răng kiêu dữ liêu được sử dung ̣ ̉ ̉ ̉ ̀ ̉ ̣ ̣ với nó là kiêu an toan. Generic cung tương đương vơi ̉ ̀ ̃ Template trong C++ tuy nhiên viêc sử dung Generic ̣ ̣ trong .net dễ dang hơn nhiêu so với Template. ̀ ̀ 8
- From Overloaded methods From Overloaded methods thường được dung thực thi cung 1 ̀ ̀ thao tac trên nhiêu loai dữ liêu. ́ ̀ ̣ ̣ Ví du: môt console application chứa 3 phương thức ̣ ̣ overloaded PrintArray dung để hiên thị cac phân tử cua ̀ ̉ ́ ̀ ̉ mang int, mang double và mang char. ̉ ̉ ̉ 9
- 10
- Overloaded methods Overloaded Trong phương thức PrintArray, loai phân tử mang (int, ̣ ̀ ̉ double or char) xuât hiên tai 2 vị trí trong môi phuơng thức ́ ̣ ̣ ̃ Thay thế cac loai nay thanh 1 tên chung (generic name) ́ ̣ ̀ ̀ Cả 3 phương thức sẽ có chung 1 dang sau: ̣ 11
- Generic method Generic Nêu nhiêu overloaded methods chỉ khac nhau ́ ̀ ́ ở kiêu dữ liêu cua cac đôi sô, nên dung ̉ ̣ ̉ ́ ́ ́ ̀ generic method. Môt khai bao generic method có thể được goi ̣ ́ ̣ ở những thời điêm khac nhau với đôi số là ̉ ́ ́ nhưng loai dữ liêu khac nhau. ̃ ̣ ̣ ́ Dưa vao loai dữ liêu cua cac đôi số được đưa ̣ ̀ ̣ ̣ ̉ ́ ́ vao generic method mà compiler điêu hanh ̀ ̀ ̀ method môt cach thich hợp. ̣ ́ ́ 12
- Generic method declaration Generic Tât cả khai bao generic method phai có type ́ ́ ̉ ̣ ́ parameter list đăt trong tiêp ngay sau tên method. Ex: static void PrintArray< E >( E[] inputArray ) Môi type parameter list chưa 1 hay nhiêu tham số ̃ ́ ̀ loai (type parameter) cach nhau bởi dâu phây. ̣ ́ ́ ̉ Type parameter là 1 identifier thay thế cho tham số thực. Type parameter có thể được dung để khai bao loai ̀ ́ ̣ dữ liêu trả về (return type) , loai dữ liêu cua tham ̣ ̣ ̣ ̉ số và loai cua cac biên cuc bô. ̣ ̉ ́ ́ ̣ ̣ 13
- Generic method’s body Generic Phân thân cua generic method được khai bao như môt ̀ ̉ ́ ̣ method thông thường. Tên tham số loai (Type parameter) được dung trong suôt ̣ ̀ ́ method phai trung loai với tên cac loai đã được khai bao ̉ ̀ ̣ ́ ̣ ́ trong danh sach tham số loai (type parameter). ́ ̣ Tham số loai (Type parameter) có thể được khai bao chỉ 1 ̣ ́ lân trong danh sach cac tham số loai (type parameter list) ̀ ́ ́ ̣ nhưng có thể xuât hiên nhiêu lân danh sach tham số ́ ̣ ̀ ̀ ́ ̉ ́ (parameter list) cua method đo. Ví du: ̣ void SwapIfGreater(ref T lhs, ref T rhs) where T : System.IComparable { ….} 14
- Generic Methods Generic Declare a generic Method: [access modifier] GenericMethodName (A list of Arguments) { //items } 15
- Generic Methods Generic For example: static void Swap(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } 16
- Generic Methods Generic The following code example shows one way to call the method by using int for the type argument: public static void TestSwap() { int a = 1; int b = 2; Swap(ref a, ref b); System.Console.WriteLine(a + " " + b); } We can also omit the type argument and the compiler will infer it. The following call to Swap is equivalent to the previous call: Swap(ref a, ref b); 17
- Generic Methods Generic Within a generic class, non-generic methods can access the class-level type parameters, as follows: class SampleClass { void Swap(ref T lhs, ref T rhs) { } } Use constraints to enable more specialized operations on type parameters in methods. 18
- Generic Methods Generic This version of Swap, now named SwapIfGreater, can only be used with type arguments that implement IComparable void SwapIfGreater(ref T lhs, ref T rhs) where T : System.IComparable { T temp; if (lhs.CompareTo(rhs) > 0) { temp = lhs; lhs = rhs; rhs = temp; } } 19
- Overloading generic method Overloading Generic method có thể overloaded. Môt class có thể cung câp 2 hay nhiêu generic methods có ̣ ́ ̀ cung tên nhưng tham số khac nhau. ̀ ́ Môt generic method có thể overloaded với 1 method ̣ generic khac hay với cac method non-generic ́ ́ void DoWork() { } void DoWork() { } void DoWork() { } 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 1
24 p | 263 | 101
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 3
39 p | 193 | 73
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 2
24 p | 214 | 73
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 4
39 p | 162 | 68
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 5
24 p | 159 | 56
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 6
38 p | 147 | 55
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 7
35 p | 134 | 54
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 3
21 p | 167 | 53
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 8
39 p | 138 | 53
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 10
30 p | 145 | 51
-
Tự học lập trình cơ sở dữ liệu Visual C .NEt part 9
39 p | 139 | 51
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 4
24 p | 131 | 44
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 6
24 p | 125 | 38
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 5
24 p | 131 | 37
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 7
24 p | 125 | 37
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 9
24 p | 123 | 37
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 8
24 p | 137 | 35
-
Giáo trình lập trình cơ sở dữ liệu với Visual Basic part 10
24 p | 127 | 34
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn