Bài giảng ngôn ngữ C# - Bài 6: Các lớp cơ sở trong C# với các kiến thức các lớp nền tảng định sẵn trong ngôn ngữ lập trình C#; ý 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#.
BÀI CÁC LỚP CƠ SỞ TRONG C# GV Chử Đức Hồng v1.0011106203 TÌNH HUỐNG DẪN NHẬP • Việc xây dựng phần mềm quản lý học viên trường Đại học Quốc gia gồm nhiều phần công việc nhiều thao tác mà cần đến công cụ mạnh mẽ tảng ngơn ngữ lập trình • Việc xử lý liệu học viên cao xử lý tập thông tin để quản lý đối tượng thực tế học viên mã hoá chương trước thực sử dụng công cụ sở tảng mà ngôn ngữ C# cung cấp v1.0011106203 Các lớp sở C# cung cấp công cụ mạnh mẽ để thực công việc chương trình phần mềm sử dụng C#? MỤC TIÊU Trình bày lớp tảng định sẵn ngơn ngữ lập trình C# Trình bày ý nghĩa lớp sở, cách chuyển đổi kiểu liệu Xây dựng chương trình đơn giản sử dụng số lớp thư viên sở C# v1.0011106203 NỘI DUNG v1.0011106203 1.1 Lớp đối tượng(object) 1.2 Lớp xâu kí tự biểu thức quy tắc 1.3 Nhóm đối tượng (Collections) 1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT • Trong C#, lớp kế thừa tạo thành phân cấp, lớp system.object gốc tất lớp • Tất lớp kế thừa phương thức thuộc tính lớp system.object • Nếu khơng khai báo kế thừa cách ngầm định • Có thể thực overload số phương thức lớp system.object lớp Lớp gốc tất lớp v1.0011106203 1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) Bí danh • C# cung cấp bí danh để thuận lợi cho việc sử dụng lớp đối tượng, dùng 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 sử dụng thuộc tính phương thức lớp object v1.0011106203 class Person { public string Name; public int Age; } object o = new Person(); o.Name = “Trung"; Lỗi Name Thành phần lớp object 1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) Các phương thức 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() } v1.0011106203 1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) GetType() • Phương thức trả kiểu đối tượng Person p = new Person(“Trung", 32); Type t = p.GetType(); • Đối tượng kiểu Type cung cấp số thơng tin mở rộng lớp mà đối tượng thành viên Các phương thức 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 1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) ToString() • • • Đây phương thức trả chuỗi thể lớp hành khơng có tham số Được dùng muốn lấy nội dung đối tượng Person p = new Person(“Trung", 32); 10 string s = p.ToString(); Gọi tường minh thực chuyển kiểu liệu khác sang kiểu string: 11 int age = 32; 12 string s = age.ToString(); Gọi ngầm thực chuyển kiểu liệu khác sang kiểu string: 13 int age = 32; 14 string s = “Lan" + age; v1.0011106203 1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo) Overide phương thức ToString() Phương thức thực override để đưa nhiều thông tin đố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 } v1.0011106203 10 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Ví dụ ArrayList 80 //Bỏ phần tử có số 1, phân tử lại dịch trái a.Add("aaa"); 81 a.RemoveAt(1); // phần tử “aaa” 74 a.Add("ddd"); 82 75 //Kết n=3 //Bỏ phần tử có tên “aaa”, phần tử lại dịch trái 76 int n = a.Count; 83 a.Remove("aaa"); 77 //Chỉ số phải 84 //Kiểm tra phần tử mảng 78 //thêm phần tử vào vị trí 85 if (a.Contains("aaa")) 79 a.Insert(2, "ccc"); 86 Console.WriteLine("found"); 87 else 88 Console.WriteLine("not found"); 71 ArrayList a = new ArrayList(); 72 a.Add("bbb"); 73 v1.0011106203 35 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) ArrayList Array Phần tử mảng sử dụng đơn giản nhiều ứng dụng, hiệu cao, dễ sử dụng an tồn kiểu Tuy nhiên lại có nhược điểm kích thước cố định Kích thước mảng cố định khởi tạo 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 v1.0011106203 36 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Stack Stack vùng nhớ lưu giữ theo kiểu last-in-first-out: • Dữ liệu lưu mảng • Kích thước mảng thay đổi tự động cần • Ví dụ: tạo stack để lưu thứ tự gọi phương thức: 96 using System.Collections; 97 class Trace 98 { 99 Stack callChain = new Stack(); 100 101 } v1.0011106203 37 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Các dịch vụ Stack • Synchronized(): (static) trả Stack wrapper thread-safe • Count: Trả số thành phần ngăn xếp • IsReadOnly: Xác định ngăn xếp đọc • IsSynchronized: Xác định ngăn xếp đồng • SyncRoot: Trả đối tượng sử dụng để đồng truy cập Stack • Clear(): Xóa tất thành phần ngăn xếp • Clone(): Tạo • Contains(): Xác định xem thành phần có mảng • CopyTo(): Sao chép thành phần ngăn xếp đến mảng chiều tồn • Pop(): Xóa trả phần tử đầu Stack • Push(): Đưa đối tượng vào đầu ngăn xếp • Peek(): Trả phần tử ngăn xếp khơng xóa • GetEnumerator(): Trả enumerator cho ngăn xếp • ToArray(): Sao chép thành phần qua mảng v1.0011106203 38 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) 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 v1.0011106203 39 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Queue Queue vùng nhớ lưu giữ theo kiểu first-in-first-out: Dữ liệu lưu mảng Kích thước mảng thay đổi tự động cần Ví dụ: tạo queue để lưu thứ tự gọi phương thức: 111 using System.Collections; 112 class Watcher 113 { 114 Queue events = new Queue(); Tạo Queue để lưu kiện 115 116 } v1.0011106203 40 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Các dịch vụ Queue • Synchronized(): (static) trả Queue wrapper thread-safe • Count: Thuộc tính trả số thành phần hàng đợi • IsReadOnly: Thuộc tính xác định hàng đợi đọc • IsSynchronized: Thuộc tính xác định hàng đợi đồng • SyncRoot: Trả đối tượng sử dụng để đồng truy cập Queue • Clear(): Xóa tất thành phần hàng đợi • Clone(): Tạo • Contains(): Xác định xem thành phần có mảng • CopyTo(): Sao chép thành phần hàng đợi đến mảng chiều đa tồn • Dequeue(): Xóa trả thành phần bắt đầu hàng đợi • Enqueue(): Thêm thành phần vào hàng đợi • Peek(): Trả phần tử hàng đợi khơng xóa • GetEnumerator(): Trả enumerator cho hàng đợi • ToArray(): Sao chép thành phần qua mảng v1.0011106203 41 1.3 NHĨM CÁC ĐỐI TƯỢNG (tiếp theo) Ví dụ Queue 117 Queue q = new Queue(); 118 // Add 119 q.Enqueue("aaa"); 120 q.Enqueue("bbb"); 121 q.Enqueue("ccc"); 122 //Kiểm tra 123 string s = (string)q.Peek(); 124 //Remove 125 string t = (string)q.Dequeue(); 126 v1.0011106203 42 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Hashtable • Hashtable kiểu từ điển tối ưu cho việc truy cập nhanh • Từ điển kiểu tập hợp có hai thành phần liên hệ với khóa giá trị • Ví dụ: Trong từ điển ngơn ngữ Oxford liên hệ từ (khóa) phần định nghĩa từ (giá trị) • Dữ liệu lưu bảng hash • Lưu tham chiếu đối tượng theo khố giá trị • Phương thức GetHashCode() sử dụng để xác định vị trí • Sử dụng số để giúp cho việc truy cập thuận tiện v1.0011106203 43 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Ví dụ Hashtable //Tạo Hashtabe có tên ages 127 Hashtable ages = new Hashtable(); 128 ages[“Lan"] = 27; 129 ages[“Trung"] = 32; Liệt kê mục 130 //Thêm 131 ages.Add(“Tu", 15); 132 //Cập nhật 133 ages[“Lan"] = 28; 134 // Lấy 135 int a = (int)ages[“Lan"]; 136 foreach (DictionaryEntry entry in ages) 137 { 138 string name = (string)entry.Key; Lấy khoá giá trị 139 int age = (int) entry.Value; 140 141 } v1.0011106203 44 PROPERTIES On passing, 'Finish' button: On failing, 'Finish' button: Allow user to leave quiz: User may view slides after quiz: User may attempt quiz: Goes to Next Slide Goes to Next Slide At any time At any time Unlimited times TÓM LƯỢC CUỐI BÀI v1.0011106203 • Điểm mạnh kế thừa lớp gốc, cha tất lớp C# vai trị lớp ToString • Nắm nhóm đối tượng C# tập hợp quản lý linh động quản lý so với cách quản lý thông thường khác mảng • Sử dụng điểm mạnh việc sử dụng tập hợp, kế thừa lớp sở để ứng dụng việc viết ứng dụng phần mềm sử dụng C# 46 PROPERTIES On passing, 'Finish' button: On failing, 'Finish' button: Allow user to leave quiz: User may view slides after quiz: User may attempt quiz: Goes to Next Slide Goes to Next Slide At any time At any time Unlimited times PROPERTIES Allow user to leave interaction: Show ‘Next Slide’ Button: Completion Button Label: Anytime Don't show Next Slide PROPERTIES Allow user to leave interaction: Show ‘Next Slide’ Button: Completion Button Label: Anytime Don't show Next Slide ... v1.00111 062 03 32 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Tạo ArrayList để lưu employees 65 using System.Collections; 66 class Department 67 { 68 ArrayList employees = new ArrayList(); 69 70 } v1.00111 062 03... x = a[1]; 94 foreach (int i in a) 95 v1.00111 062 03 36 1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo) Stack Stack vùng nhớ lưu giữ theo kiểu last-in-first-out: • Dữ liệu lưu mảng • Kích thước mảng thay... text.Insert(12, "/bode"); 46 text[ 16] = 'y'; v1.00111 062 03 20 CÂU HỎI THẢO LUẬN Đưa khai báo đối tượng liệu "person", kiểu liệu chuỗi, sử dụng từ khóa "new" ? v1.00111 062 03 21 1.2.1 LỚP XÂU KÝ