intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình cơ sở dữ liệu C Sharp-Phần 4

Chia sẻ: Phan Thi Ngoc Giau | Ngày: | Loại File: PDF | Số trang:57

104
lượt xem
50
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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

Chủ đề:
Lưu

Nội dung Text: Lập trình cơ sở dữ liệu C Sharp-Phần 4

  1. Generics Generics
  2. ̣ 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
  3. ̣ ̉ ̀ 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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. 10
  11. 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
  12. 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
  13. 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
  14. 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
  15. Generic Methods Generic  Declare a generic Method: [access modifier] GenericMethodName (A list of Arguments) { //items } 15
  16. Generic Methods Generic  For example: static void Swap(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } 16
  17. 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
  18. 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
  19. 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
  20. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2