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#.
Trang 1v1.0011106203 1
BÀI 6 CÁC LỚP CƠ SỞ TRONG C#
GV Chử Đức Hoàng
Trang 2v1.0011106203 2
TÌNH HUỐNG DẪN NHẬP
để thực hiện các công việc trong chương trình phần mềm sử dụng C#?
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ảngcủ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
Trang 3v1.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#
Trang 4v1.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
Trang 5Lớp gốc của tất cả các lớp
1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT
Trang 6v1.0011106203 6
Bí danh
một trong hai cách sau:
object a;
System.Object b;
các thuộc tính và phương thức của lớp object
Trang 7v1.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)
Trang 8v1.0011106203 8
1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo)
GetType()
Person p = new Person(“Trung", 32);
Type t = p.GetType();
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 ()
Trang 9v1.0011106203 9
ToString()
dùng khi muốn lấy nội dung của một đối tượng
14 string s = “Lan" + age;
1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo)
Trang 10v1.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:
18 public int Age;
19 public override string ToString()
Trang 11v1.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ứcWriteLine()
Khi sử dụng đối tượng
26 string s = "Hello " + p;
27 Console.WriteLine(p);
1.1 LỚP ĐỐI TƯỢNG - SYSTEM OBJECT (tiếp theo)
Trang 12v1.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?
Trang 13On 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
Trang 14v1.0011106203 14
1.2 LỚP XÂU KÝ TỰ VÀ BIỂU THỨC CHÍNH TẮC
Trang 15• 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
Iconvertible
hệ thống NET
Trang 16nằ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”;
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ằngtạ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àycũng được dùng trong vài cú pháp dòng lệnh, như là địa chỉ URLs hay đường dẫnthư 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ấuché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)
Trang 17v1.0011106203 17
(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ớpString rằng chuỗi theo sau là nguyên văn, thậm chí nó chứa nhiều dòng hoặc baogồ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ĩachuỗi sau là tương đương với nhau:
là ký tự escape, nên nó phải được đặt trước một ký tự chéo ngược thứ hai Trongkhai 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”;
1.2.1 LỚP XÂU KÝ TỰ (tiếp theo)
Trang 18v1.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 = <body>hello</body>
Trang 19v1.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
đế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ủamảng chuỗi
• 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
Trang 2041 { public sealed class StringBuilder{ } }
• Thuận lợi khi muốn thay đổi:
42 StringBuilder text = new StringBuilder();
Trang 21v1.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" ?
Trang 22v1.0011106203 22
1.2.1 LỚP XÂU KÝ TỰ (tiếp theo)
Đặc điểm khi của StringBuilder
47 StringBuilder sb = new StringBuilder("Hello");
48 StringBuilder sb = new StringBuilder(20);
• 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
Trang 23v1.0011106203 23
Ví dụ:
text.Append("<html>");
text.Append("<body>");
text.Append("<p>");
text.Append("hello");
Trang 24v1.0011106203 24
1.2.1 LỚP XÂU KÝ TỰ (tiếp theo)
Phương thức chính của StringBuilder
khác trong chuỗi hiện thời
Trang 25v1.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
liệu), hay một tập hợp các ký tự
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,
thân nó
1.2.1 LỚP XÂU KÝ TỰ (tiếp theo)
Trang 26v1.0011106203 26
Các kiểu ký tự trong biểu thức quy tắc
Ký tự bình thường (literal): những ký tự này mà chúng ta sử dụng để so khớpvớ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)
Trang 27v1.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):
“Subject”, và “Date” sao cho những từ này bắt đầu bằng ký tự dòng mới (^) và kếtthúc với dấu hai chấ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ómcá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
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)
Trang 28v1.0011106203 28
Lớp Regex
biểu thức quy tắc để so khớp, tìm kiếm và thay thế chuỗi
Perl5
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
Khả năng của Regex
.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ếtchuỗi, và kết quả trả về là một tập hợp
nhau theo một quy định nào đó
1.2.1 LỚP XÂU KÝ TỰ (tiếp theo)
Trang 29v1.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?
Trang 30On 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
Trang 31theo từng phần tử.
• Đặc biệt, một collection phải thi hành một interface
(collection) như: add, Remove, count, contains, traverse, sort
Trang 32v1.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ướcmả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)
Trang 34v1.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 Clear ()
• bool Contains(object value)
• int IndexOf (object value)
• object this[int index] { get set }
• int Capacity { get set }
Trang 37v1.0011106203 37
Stack
Stack là vùng nhớ lưu giữ theo kiểu last-in-first-out:
• Ví dụ: tạo stack để lưu thứ tự gọi các phương thức:
Trang 38v1.0011106203 38
Các dịch vụ của Stack
• Synchronized(): (static) trả về một Stack wrapper được thread-safe
1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo)
Trang 40v1.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:
Trang 41v1.0011106203 41
Các dịch vụ của Queue
• Synchronized(): (static) trả về một Queue wrapper được thread-safe
• IsReadOnly: Thuộc tính xác định hàng đợi là chỉ đọc
• Clear(): Xóa tất cả các thành phần trong hàng đợi
1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo)
Trang 43v1.0011106203 43
Hashtable
• Hashtable là một kiểu từ điển được tối ưu cho việc truy cập được nhanh
• Từ điển là kiểu tập hợp trong đó có hai thành phần chính liên hệ với nhau là khóa
và giá trị
định nghĩa từ (giá trị)
• Lưu tham chiếu đối tượng theo cả khoá và giá trị
• Sử dụng chỉ số để giúp cho việc truy cập được thuận tiện
1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo)
Trang 44v1.0011106203 44
Ví dụ Hashtable
//Tạo Hashtabe có tên ages
127 Hashtable ages = new Hashtable();
138 string name = (string)entry.Key;
139 int age = (int) entry.Value;
140
141 }
Liệt kê các mục
Lấy khoá và giá trị
1.3 NHÓM CÁC ĐỐI TƯỢNG (tiếp theo)
Trang 45On 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
Trang 46v1.0011106203 46
trò của lớp ToString
thế nào cũng như sự linh động của sự quản lý này so với các cách quản
lý thông thường khác như mảng
sở để ứng dụng trong việc viết ứng dụng phần mềm sử dụng C#
TÓM LƯỢC CUỐI BÀI
Trang 47On 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
Trang 48Allow user to leave interaction: Anytime
Show ‘Next Slide’ Button: Don't show
Completion Button Label: Next Slide
Trang 49Allow user to leave interaction: Anytime
Show ‘Next Slide’ Button: Don't show
Completion Button Label: Next Slide