Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 5

Chia sẻ: No Comment | Ngày: | Loại File: PPT | Số trang:57

0
150
lượt xem
73
download

Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 5

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

Tham khảo tài liệu 'lập trình windows - lập trình c #- lập trình c shap - chương 5', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 5

  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

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản