Bài giảng Ngôn ngữ C# - Bài 6: Các lớp cơ sở trong C# - Chử Đức Hoàng

1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) GetType() • Phương thức này trả về kiểu của đối tượng. Person p = new Person(“Trung", 32); Type t = p.GetType(); • Đối tượng kiểu Type này có thể cung cấp một số thông tin mở rộng về lớp mà đối tượng là thành viên. Các phương thức cơ bản của lớp Type: public string FullName { get; } public bool IsAbstract { get; } public bool IsClass { get; } public bool IsPrimitive { get; } public bool IsInterface { get; } public Type BaseType { get; } public ConstructorInfo[] GetConstructors() public FieldInfo [] GetFields () public MethodInfo [] GetMethods () public Type [] GetInterfaces ()

pdf49 trang | Chia sẻ: thanhle95 | Lượt xem: 609 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Ngôn ngữ C# - Bài 6: Các lớp cơ sở trong C# - Chử Đức Hoàng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
v1.0011106203 1 BÀI 6 CÁC LỚP CƠ SỞ TRONG C# GV. Chử Đức Hoàng v1.0011106203 2 TÌNH HUỐNG DẪN NHẬP  Các lớp cơ sở trong C# cung cấp những công cụ mạnh mẽ như thế nào để thực hiện các công việc trong chương trình phần mềm sử dụng C#? • Việc xây dựng phần mềm quản lý học viên của trường Đại học Quốc gia gồm nhiều phần công việc cũng như nhiều thao tác mà cần đến các công cụ mạnh mẽ nền tảng của ngôn ngữ lập trình. • Việc xử lý các dữ liệu học viên và cao hơn là xử lý tập các thông tin để quản lý các đối tượng trong thực tế là các học viên đã được mã hoá trong các chương trước sẽ thực hiện sử dụng các công cụ cơ sở nền tảng mà ngôn ngữ C# cung cấp. v1.0011106203 3 MỤC TIÊU Trình bày các lớp nền tảng định sẵn trong ngôn ngữ lập trình C#. Trình bày ý nghĩa của các lớp cơ sở, cách chuyển đổi kiểu dữ liệu. Xây dựng một chương trình đơn giản sử dụng một số lớp thư viên cơ sở trong C#. v1.0011106203 4 NỘI DUNG 1.1. Lớp đối tượng(object)1 1.2. Lớp xâu kí tự và biểu thức quy tắc2 1.3. Nhóm đối tượng (Collections)3 v1.0011106203 5 • Trong C#, các lớp kế thừa nhau tạo thành cây phân cấp, và lớp system.object là gốc của tất cả các lớp. • Tất cả các lớp đều được kế thừa các phương thức và thuộc tính của lớp system.object. • Nếu không khai báo thì nó vẫn được kế thừa bằng cách ngầm định. • Có thể thực hiện overload một số phương thức lớp system.object trong lớp con. Lớp gốc của tất cả các lớp 1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT v1.0011106203 6 Bí danh • C# cung cấp một bí danh để thuận lợi cho việc sử dụng lớp đối tượng, có thể dùng một trong hai cách sau:  object a;  System.Object b; • Có thể sử dụng lớp object để khai báo đối tượng. Đối tượng này chỉ được sử dụng các thuộc tính và phương thức của lớp object. 1. class Person 2. { 3. public string Name; 4. public int Age; 5. ... 6. } 7. object o = new Person(); 8. o.Name = “Trung"; Lỗi do Name không phải Thành phần của lớp object 1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) v1.0011106203 7 Các phương thức của lớp object class Object { public Type GetType () public virtual string ToString () public virtual int GetHashCode () public virtual bool Equals (object o) public static bool Equals (object a, object b) public static bool ReferenceEquals(object a, object b) protected void Finalize () protected object MemberwiseClone() } 1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) v1.0011106203 8 1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) GetType() • Phương thức này trả về kiểu của đối tượng. Person p = new Person(“Trung", 32); Type t = p.GetType(); • Đối tượng kiểu Type này có thể cung cấp một số thông tin mở rộng về lớp mà đối tượng là thành viên. Các phương thức cơ bản của lớp Type: public string FullName { get; } public bool IsAbstract { get; } public bool IsClass { get; } public bool IsPrimitive { get; } public bool IsInterface { get; } public Type BaseType { get; } public ConstructorInfo[] GetConstructors() public FieldInfo [] GetFields () public MethodInfo [] GetMethods () public Type [] GetInterfaces () v1.0011106203 9 ToString() • Đây là phương thức trả về chuỗi thể hiện lớp hiện hành và không có tham số. Được dùng khi muốn lấy nội dung của một đối tượng. 9. Person p = new Person(“Trung", 32); 10. string s = p.ToString(); • Gọi tường minh thực hiện chuyển kiểu dữ liệu khác sang kiểu string: 11. int age = 32; 12. string s = age.ToString(); • Gọi ngầm thực hiện chuyển kiểu dữ liệu khác sang kiểu string: 13. int age = 32; 14. string s = “Lan" + age; 1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) v1.0011106203 10 Overide phương thức ToString() Phương thức này có thể thực hiện override để đưa ra nhiều thông tin về đối tượng: 15. class Person 16. { 17. public string Name; 18. public int Age; 19. public override string ToString() 20. { 21. return Name + " " + Age; 22. } 23. ... 24. } 1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) v1.0011106203 11 Gọi tự động ToString() Đôi khi phương thức ToString() được gọi tự động trong một số trường hợp: Khi sử dụng đối tượng trong phương thức WriteLine() Khi sử dụng đối tượng trong chuỗi ký tự 25. Person p = new Person(“Trung", 32); 26. string s = "Hello " + p; 27. Console.WriteLine(p); 1.1. LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) v1.0011106203 12 CÂU HỎI THẢO LUẬN Có hai hình thức gọi tường minh và gọi ngầm. Trong quá trình lập trình thì người lập trình nên sử dụng kiểu lập trình nào? PROPERTIES On passing, 'Finish' button: Goes to Next Slide On failing, 'Finish' button: Goes to Next Slide Allow user to leave quiz: At any time User may view slides after quiz: At any time User may attempt quiz: Unlimited times v1.0011106203 14 1.2. LỚP XÂU KÝ TỰ VÀ BIỂU THỨC CHÍNH TẮC v1.0011106203 15 1.2.1. LỚP XÂU KÝ TỰ • Là lớp rất mạnh và linh hoạt. • C# có từ khoá riêng và kết hợp với cú pháp để thao tác trong chuỗi như: nối chuỗi, so sánh chuỗi, • Lớp xâu ký tự thực hiện bởi hai lớp:  Lớp “System.String” để biểu diễn chuỗi ký tự cố định.  Lớp “System.Text.StringBuilder” để thao tác trong trường hợp chuỗi thay đổi. Lớp system String • FCL cung cấp lớp String trong namespace system. namespace System { public sealed class String:IComparable, ICloneble, IConvertible { ... } } • Không cho phép lớp khác kế thừa. • Lớp này cũng thực thi ba giao diện hệ thống là IComparable, ICloneable, và Iconvertible. • Các giao diện này cho phép lớp System.String chuyển đổi với những lớp khác trong hệ thống .NET. v1.0011106203 16 Tạo chuỗi • Hai cách khai báo sau là tương đương nhau: 28. string s; 29. System.String t; • Cách phổ biến nhất để tạo ra một chuỗi là gán cho một chuỗi trích dẫn tức là chuỗi nằm trong dấu ngoặc kép, kiểu chuỗi này cũng được biết như là một chuỗi hằng, khai báo như sau: 30. string st = “Day la chuoi hang”; • Những chuỗi trích dẫn có thể được thêm các ký tự escape, như là “\n” hay “\t”, ký tự này bắt đầu với dầu chéo ngược (“\”), các ký tự này được dùng để chỉ ra rằng tại vị trí đó xuống dòng hay tab được xuất hiện. Bởi vì dấu gạch chéo ngược này cũng được dùng trong vài cú pháp dòng lệnh, như là địa chỉ URLs hay đường dẫn thư mục, do đó trong chuỗi trích dẫn dấu chéo ngược này phải được đặt trước dấu chéo ngược khác, tức là dùng hai dấu chéo ngược trong trường hợp này. 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 17 • Chuỗi cũng có thể được tạo bằng cách sử dụng chuỗi cố định hay nguyên văn (verbatim), tức là các ký tự trong chuỗi được giữ nguyên không thay đổi. Chuỗi này được bắt đầu với biểu tượng @. Biểu tượng này bảo với hàm khởi dựng của lớp String rằng chuỗi theo sau là nguyên văn, thậm chí nó chứa nhiều dòng hoặc bao gồm những ký tự escape. Trong chuỗi nguyên văn, ký tự chéo ngược và những ký tự sau nó đơn giản là những ký tự được thêm vào chuỗi. Do vậy, ta có 2 định nghĩa chuỗi sau là tương đương với nhau: 31. string literal1 = “\\\\MyDocs\\CSharp\\QuanlyhocvienC#.cs”; 32. string verbatim1 = @”\\MyDocs\CSharp\QuanlyhocvienC#.cs”; • Trong chuỗi thứ nhất, là một chuỗi bình thường được sử dụng, do đó dấu ký tự chéo là ký tự escape, nên nó phải được đặt trước một ký tự chéo ngược thứ hai. Trong khai báo thứ hai chuỗi nguyên văn được sử dụng, nên không cần phải thêm ký tự chéo ngược. Một ví dụ thứ hai minh họa việc dùng chuỗi nguyên văn: 33. string literal2 = “Dong mot \n dong hai”; 34. string verbatim2 = @”Dong mot dong hai”; 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 18 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) Tạo đối tượng chuỗi Sử dụng từ khoá “new” để tạo đối tượng. Có thể sử dụng ký tự hoặc mảng ký tự làm tham số: 35. char[] t = new char[5] { 'h', 'e', 'l', 'l', 'o' }; 36. string a = new string(t); // a = hello 37. string b = new string(t, 0, 2);//b=he 38. string c = new string('z', 3);//c=zzz 39. string s = "hello";//s=hello -> cách khai báo tắt Text = hello v1.0011106203 19 Một số phương thức của lớp String • Empty Trường public static thể hiện một chuỗi rỗng. • Compare() Phương thức public static để so sánh hai chuỗi. • CompareOrdinal() Phương thức public static để so sánh hai chuỗi không quan tâm đến thứ tự. • Concat() Phương thức public static để tạo chuỗi mới từ một hay nhiều chuỗi. • Copy() Phương thức public static tạo ra một chuỗi mới bằng sao từ chuỗi khác. • Equal() Phương thức public static kiểm tra xem hai chuỗi có cùng giá trị hay không. • Join() Phương thức public static kết nối các chuỗi xác định giữa mỗi thành phần của mảng chuỗi. • Length() Chiều dài của chuỗi. • CompareTo() So sánh hai chuỗi. • CopyTo() Sao chép một số các ký tự xác định đến một mảng ký tự Unicode. • EndsWidth() Chỉ ra vị trí của chuỗi xác định phù hợp với chuỗi đưa ra. • Insert() Trả về chuỗi mới đa được chèn một chuỗi xác định. • PadLeft() Canh lề phải những ký tự trong chuỗi, chèn vào bên trái khoảng trắng hay các ký tự xác định. • PadRight() Canh lề trái những ký tự trong chuỗi, chèn vào bên phải khoảng trắng hay các ký tự xác định. 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 20 Lớp StringBuilder • FCL cung cấp lớp StringBuilder trong không gian tên System.Text để tạo chuỗi ký tự có thể thay đổi: 40. namespace System.Text 41. { public sealed class StringBuilder{...} } • Thuận lợi khi muốn thay đổi: 42. StringBuilder text = new StringBuilder(); 43. text.Append("hello"); 44. text.Remove(12, 4); 45. text.Insert(12, "/bode"); 46. text[16] = 'y'; 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 21 CÂU HỎI THẢO LUẬN Đưa ra khai báo đối tượng dữ liệu "person", kiểu dữ liệu là chuỗi, sử dụng từ khóa "new" ? v1.0011106203 22 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) Đặc điểm khi của StringBuilder • Khởi tạo theo chuỗi: 47. StringBuilder sb = new StringBuilder("Hello"); • Khởi tạo dung lượng: 48. StringBuilder sb = new StringBuilder(20); • Dễ dàng tạo, bổ xung. • Khi bổ sung một đối tượng StringBuilder thì làm thay đổi trên giá trị thật của chuỗi, chứ không phải trên bản sao. v1.0011106203 23 Ví dụ:  string Create()  {  //Tạo đối tượng có kiểu StringBuilder  StringBuilder text = new StringBuilder();  //Tăng hoặc giảm dung lượng  text.Append("");  text.Append("");  text.Append("");  text.Append("hello");  //Tạo đối tượng có dung lượng 100  StringBuilder text1 = new StringBuilder(100);  a.Capacity = 200; // Đặt lại dung lượng 200  ...  //Chuyển kiểu sử dụng phương thức ToString()  return text.ToString();  } 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 24 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) Phương thức chính của StringBuilder • Phương thức chính StringBuilder bao gồm: • Append() : thêm một chuỗi vào chuỗi đương thời • AppendFormat() :thêm một chuỗi được trình bày từ các chỉ định định dạng • Insert(): chèn một chuỗi con vào chuỗi đương thời • Remove() :bỏ các kí tự từ chuỗi đương thời • Replace() :thay thế kí tự này bằng kí tự khác hoặc chuỗi con này bằng chuỗi con khác trong chuỗi hiện thời • ToString(): trả về chuỗi hiện thời ép thành một đối tượng System.Object (nạp chồng từ System.Object).  Không thể ép kiểu (tường minh hay không tưòng minh) từ StringBuilder sang String.  Nếu ta muốn xuất nội dung của StringBuilder như là một String thì dùng phương thức Tostring(). v1.0011106203 25 Các biểu thức quy tắc (Regular Expression) • Biểu thức qui tắc để mô tả và thao tác văn bản. • Một biểu thức qui tắc thường được áp dụng cho một chuỗi (là toàn bộ văn bản, tài liệu), hay một tập hợp các ký tự. • Kết quả: trả về một chuỗi con hoặc một chuỗi mới được bổ sung từ một vài phần của chuỗi gốc. • string không thể thay đổi được nên không thể thay đổi bởi biểu thức qui tắc. • Ví dụ: áp dụng biểu thức qui tắc cho chuỗi sau: Mot, hai, ba, Trung Tam Dao Tao CNTT  Có thể trả về bất cứ hay tất cả danh sách các chuỗi con (Mot, hai,...)  Có thể tạo ra các phiên bản chuỗi được bổ sung của những chuỗi con như: TrUng TAM,... • Biểu thức quy tắc này được quyết định bởi cú pháp các ký tự qui tắc của chính bản thân nó. 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 26 Các kiểu ký tự trong biểu thức quy tắc • Bao gồm hai kiểu ký tự:  Ký tự bình thường (literal): những ký tự này mà chúng ta sử dụng để so khớp với chuỗi ký tự đích.  Metacharacter: là các biểu tượng đặc biệt, có hành động như là các lệnh trong bộ phân tích (parser) của biểu thức. • Bộ phân tích là một cơ chế có trách nhiệm hiểu được các biểu thức qui tắc. 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 27 Ví dụ biểu thức quy tắc • Ví dụ tạo một biểu thức qui tắc như sau: ^(From|To|Subject|Date): • Biểu thức trên so khớp với bất cứ chuỗi con nào với những từ như : “From”, “To”, “Subject”, và “Date” sao cho những từ này bắt đầu bằng ký tự dòng mới (^) và kết thúc với dấu hai chấm (:). • Ký hiệu dấu mũ (^) chỉ ra cho bộ phân tích biểu thức qui tắc rằng chuỗi muốn tìm kiếm phải bắt đầu từ dòng mới. • Trong biểu thức này các ký tự như “(”,”)”, và “|” là các metacharacter dùng để nhóm các chuỗi ký tự bình thường như “From”, “To”,”Subject”, và “Date” và chỉ ra rằng bất cứ sự lựa chọn nào trong số đó đều được so khớp đúng. • Ngoài ra ký tự “^” cũng là ký tự metacharacter chỉ ra bắt đầu dòng mới. • Tóm lại với chuỗi biểu thức qui tắc như: ^(From|To|Subject|Date) thì có thể phát biểu theo ngôn ngữ tự nhiên như sau: “Phù hợp với bất cứ chuỗi nào bắt đầu bằng một dòng mới được theo sau bởi một trong bốn chữ From, To, Subject, Date và theo sau là ký tự dấu hai chấm”. 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 28 Lớp Regex • MS.NET cung cấp hướng tiếp cận hướng đối tượng (object- oriented approad) cho biểu thức quy tắc để so khớp, tìm kiếm và thay thế chuỗi. • Biểu thức quy tắc của ngôn ngữ C# là được xây dựng từ lớp regexp của ngôn ngữ Perl5. • Namspace System.Text.RegularExpressions của thư viện BCL (Base Class Library) chứa tất cả các đối tượng liên quan đến biểu thức quy tắc trong môi trường .NET. • Lớp quan trọng nhất mà biểu thức quy tắc hỗ trợ là Regex. Khả năng của Regex • Sử dụng Regex để tìm kiếm tập hợp: Hai lớp được thêm vào trong namespace .NET cho phép thực hiện việc tìm kiếm một chuỗi một cách lặp đi lặp lại cho đến hết chuỗi, và kết quả trả về là một tập hợp. • Sử dụng Regex để gom nhóm: gom nhóm một số các biểu thức tương tự với nhau theo một quy định nào đó. 1.2.1. LỚP XÂU KÝ TỰ (tiếp theo) v1.0011106203 29 CÂU HỎI THẢO LUẬN So sánh sự khác nhau giữa dung lượng đối tượng và giá trị của đối tượng? PROPERTIES On passing, 'Finish' button: Goes to Next Slide On failing, 'Finish' button: Goes to Next Slide Allow user to leave quiz: At any time User may view slides after quiz: At any time User may attempt quiz: Unlimited times v1.0011106203 31 1.3. NHÓM CÁC ĐỐI TƯỢNG • Nhóm các đối tượng lớp cơ sở của .NET Framework có các cấu trúc dữ liệu như:  ArrayList  Stack  Queue  Hashtable • Các lớp cấu trúc dữ liệu này nằm trong namespace System.Collections. • Lưu giữ các đối tượng • Quản lý bộ nhớ hợp lý • Collection biểu diễn một tập hợp có thứ tự của các đối tượng mà có thể truy xuất theo từng phần tử. • Đặc biệt, một collection phải thi hành một interface. • Cung cấp các phương thức và thuộc tính để thao tác trên các phần tử của tập hợp (collection) như: add, Remove, count, contains, traverse, sort. v1.0011106203 32 • Phần tử trong Array lists  Có thể lưu trữ bất kì đối tượng nào mà ta muốn trong một Arraylist.  Khi truy nhập đến đối tượng, thì cần ép kiểu chúng trở lại kiểu dữ liệu tương đương:  Ví dụ: Vector element1 = (Vector)vectors[1];  Có thể chèn hoặc bỏ các phần tử vào Arraylist và làm cho tất cả các phần tử theo sau bị thay đổi tương ứng trong bộ nhớ và có thể tái định vị toàn bộ Arraylist.  Khi thêm phần tử vào trong Arraylist làm cho số phần tử nhiều hơn kích thước mảng thì nó sẽ tự động tăng gấp đôi kích thước hiện tại của mảng. 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) v1.0011106203 33 Tạo ArrayList để lưu employees 65. using System.Collections; 66. class Department 67. { 68. ArrayList employees = new ArrayList(); 69. ... 70. } 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) v1.0011106203 34 Các dịch vụ cơ bản của ArrayList • public class ArrayList : IList, ICloneable • { • int Add (object value) • void Insert(int index, object value) • void Remove (object value) • void RemoveAt(int index) • void Clear () • bool Contains(object value) • int IndexOf (object value) • object this[int index] { get... set.. } • int Capacity { get... set... } • void TrimToSize() • ... • } 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) v1.0011106203 35 Ví dụ ArrayList 71. ArrayList a = new ArrayList(); 72. a.Add("bbb"); 73. a.Add("aaa"); 74. a.Add("ddd"); 75. //Kết quả n=3 76. int n = a.Count; 77. //Chỉ số phải bắt đầu từ 0 78. //thêm phần tử vào vị trí 2 79. a.Insert(2, "ccc"); 80. //Bỏ đi phần tử có chỉ số 1, các phân tử còn lại dịch trái 81. a.RemoveAt(1); // phần tử “aaa” 82. //Bỏ đi phần tử có tên là “aaa”, các phần tử còn lại dịch trái 83. a.Remove("aaa"); 84. //Kiểm tra phần tử trong mảng 85. if (a.Contains("aaa")) 86. Console.WriteLine("found"); 87. else 88. Console.WriteLine("not found"); 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) v1.0011106203 36 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) ArrayList và Array Phần tử mảng sử dụng đơn giản trong nhiều ứng dụng, hiệu quả cao, dễ sử dụng và an toàn kiểu. Tuy nhiên nó lại có nhược điểm là kích thước cố định. 89. int[] a = new int[10]; 90. a[0] = 17; 91. a[1] = 99; 92. ... 93. int x = a[1]; 94. foreach (int i in a) 95. ... Kích thước mảng cố định khi khởi tạo v1.0011106203 37 Stack Stack là vùng nhớ lưu giữ theo kiểu last-in-first-out: • Dữ liệu được lưu trong mảng • Kích thước mảng có thể thay đổi tự động khi cần • Ví dụ: tạo stack để lưu thứ tự gọi các phương thức: 96. using System.Collections; 97. class Trace 98. { 99. Stack callChain = new Stack(); 100. ... 101. } 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) v1.0011106203 38 Các dịch vụ của Stack • Synchronized(): (static) trả về một Stack wrapper được thread-safe. • Count: Trả về số thành phần trong ngăn xếp • IsReadOnly: Xác định ngăn xếp là chỉ đọc • IsSynchronized: Xác định ngăn xếp được đồng bộ • SyncRoot: Trả về đối tượng có thể được sử dụng để đồng bộ truy cập Stack. • Clear(): Xóa tất cả các thành phần trong ngăn xếp • Clone(): Tạo ra một bản sao • Contains(): Xác định xem một thành phần có trong mảng. • CopyTo(): Sao chép những thành phần của ngăn xếp đến mảng một chiều đã tồn tại • Pop(): Xóa và trả về phần tử đầu Stack • Push(): Đưa một đối tượng vào đầu ngăn xếp • Peek(): Trả về phần tử đầu tiên của ngăn xếp và không xóa nó. • GetEnumerator(): Trả về một enumerator cho ngăn xếp. • ToArray(): Sao chép những thành phần qua một mảng mới 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) v1.0011106203 39 Ví dụ Stack 102. Stack s = new Stack(); 103. // Add 104. s.Push("aaa"); 105. s.Push("bbb"); 106. //Kiểm tra 107. string t = (string)s.Peek(); 108. //Remove 109. string u = (string)s.Pop(); 110. ... 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) v1.0011106203 40 1.3. NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Queue Queue là vùng nhớ lưu giữ theo kiểu first-in-first-out:  Dữ liệu được lưu trong mảng  Kích thước mảng có thể thay đổi tự động khi cần  Ví dụ: tạo queue để lưu thứ tự gọi các phương thức: 111. using System.Collections; 112. class Watcher 113. { 114. Queue events = new Queue(); 115. ... 116. } Tạo Queue để lưu các sự kiện v1.0011106203 41 Các dịch vụ của Queue • Synchronized(): (static) trả về một Queue wrapper được thread-safe. • Count: Thuộc tính trả về số thành phần trong hàng đợi • IsReadOnly: Thuộc tính xác định hàng đợi là chỉ đọc • IsSynchronized: Thuộc tính xác định hàng đợi được đồng bộ • SyncRoot: Trả về đối tượng có thể được sử dụng để đồng bộ truy cập Queue. • Clear(): Xóa tất cả các thành phần trong hàng đợi • Clone(): Tạo ra một bản sao • Contains(): Xác định xem một thành phần có trong mảng. • CopyTo(): Sao chép những thành