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 ()
49 trang |
Chia sẻ: thanhle95 | Lượt xem: 590 | Lượt tải: 1
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