Danh mục

Tìm hiểu C# và ứng dụng của C# p 8

Số trang: 5      Loại file: pdf      Dung lượng: 266.09 KB      Lượt xem: 17      Lượt tải: 0    
10.10.2023

Phí lưu trữ: miễn phí Tải xuống file đầy đủ (5 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Thừa kế và Đa hìnhGvhd: Nguyễn Tấn Trần Minh Khang5.4.1 Giới hạn của lớp trừu tượngVí dụ trên, phương thức trừu tượng DrawWindow() của lớp trừu tượng Window được lớp ListBox kế thừa. Như vậy, các lớp sau này kế thừa từ lớp ListBox đều phải thực hiện lại phương thức DrawWindow(), đây là điểm giới hạn của lớp trừu tượng. Hơn nữa, như thế sau này không bao giờ ta tạo được lớp Window đúng nghĩa. Do vậy, nên chuyển lớp trừu tượng thành giao diện trừu tượng.5.4.2 Lớp niêm phongLớp niêm phong với ý nghĩa trái ngược hẳn...
Nội dung trích xuất từ tài liệu:
Tìm hiểu C# và ứng dụng của C# p 8Thừa kế và Đa hình Gvhd: Nguyễn Tấn Trần Minh Khang5.4.1 Giới hạn của lớp trừu tượngVí dụ trên, phương thức trừu tượng DrawWindow() của lớp trừu tượng Windowđược lớp ListBox kế thừa. Như vậy, các lớp sau này kế thừa từ lớp ListBox đều phảithực hiện lại phương thức DrawWindow(), đây là điểm giới hạn của lớp trừu tượng.Hơn nữa, như thế sau này không bao giờ ta tạo được lớp Window đúng nghĩa. Dovậy, nên chuyển lớp trừu tượng thành giao diện trừu tượng.5.4.2 Lớp niêm phongLớp niêm phong với ý nghĩa trái ngược hẳn với lớp trừu tượng. Lớp niêm phongkhông cho bất kỳ lớp nào khác kế thừa nó. Ta dùng từ khoá sealed để thay cho từkhoá abstract để được lớp này.5.5 Lớp gốc của tất cả các lớp: ObjectTrong C#, các lớp kế thừa tạo thành cây phân cấp và lớp cao nhất (hay lớp cơ bảnnhất) chính là lớp Object. Các phương thức của lớp Object như sau: 39Thừa kế và Đa hình Gvhd: Nguyễn Tấn Trần Minh KhangBảng 5-1 Các phương thức của lớp đối tượng Object Phương thức Ý nghĩa sử dụng Equals So sánh giá trị của hai đối tượng GetHashCode GetType Cung cấp kiểu truy cập của đối tượng ToString Cung cấp một biểu diễn chuổi của đối tượng Finalize() Xoá sạch bộ nhớ tài nguyên MemberwiswClone Tạo sao chép đối tượng; nhưng không thực thi kiểuVí dụ 5-3 Minh hoạ việc kế thừa lớp Object using System; public class SomeClass { public SomeClass(int val) { value = val; } public virtual string ToString( ) { return value.ToString( ); } private int value; } public class Tester { static void Main( ) { int i = 5; Console.WriteLine(The value of i is: {0}, i.ToString( )); SomeClass s = new SomeClass(7); Console.WriteLine(The value of s is {0}, s.ToString( )); } } Kết quả: The value of i is: 5 The value of s is 75.6 Kiểu Boxing và UnboxingBoxing và unboxing là tiến trình cho phép kiểu giá trị (value type) được đối xử nhưkiểu tham chiếu (reference type). Biến kiểu giá trị được gói (boxed) vào đối tượngObject, sau đó ngươc lại được tháo (unboxed) về kiểu giá trị như cũ.5.6.1 Boxing là ngầm địnhBoxing là tiến trình chuyển đổi một kiểu giá trị thành kiểu Object. Boxing là mộtgiá trị được định vị trong một thể hiện của Object. 40Thừa kế và Đa hình Gvhd: Nguyễn Tấn Trần Minh KhangHình 5-1 Kiểu tham chiếu BoxingBoxing là ngầm định khi ta cung cấp một giá trị ở đó một tham chiếu đến giá trị nàyvà giá trị được chuyển đổi ngầm định.Ví dụ 5-4 Minh họa boxing using System; class Boxing { public static void Main( ) { int i = 123; Console.WriteLine(The object value = {0}, i); } }Console.WriteLine() mong chờ một đối tượng, không phải là số nguyên. Để phùhợp với phương thức, kiểu interger được tự động chuyển bởi CLR và ToString()được gọi để lấy kết quả đối tượng. Đặc trưng này cho phép ta tạo các phương thứclấy một đối tượng như là một tham chiếu hay giá trị tham số, phương thức sẽ làmviệc với nó.5.6.2 Unboxing phải tường minhTrả kết quả của một đối tượng về một kiểu giá trị, ta phải thực hiện mở tường minhnó. Ta nên thiết lập theo hai bước sau: 1. Chắc chắn rằng đối tượng là thể hiện của một trị đã được box. 2. Sao chép giá trị từ thể hiện này thành giá trị của biến. 41Thừa kế và Đa hình Gvhd: Nguyễn Tấn Trần Minh KhangHình 5-2 Boxing và sau đó unboxingVí dụ 5-5 Minh họa boxing và unboxing using System; public class UnboxingTest { public static void Main( ) { int i = 123; //Boxing object o = i; // unboxing (must be explict) int j = (int) o; Console.WriteLine(j: {0}, j); } }5.7 Lớp lồngLớp được khai báo trong thân của một lớp được gọi là lớp nội (inner class) hay lớplồng (nested class), lớp kia gọi là lớp ngoại (outer class). Lớp nội có thuận lợi làtruy cập được trực tiếp tất cả các thành viên của lớp ngoài. Một phương thức củalớp nội cũng có thể truy cập đến các thành viên kiểu private của các lớp ngoài. Hơnnữa, lớp nội nó ẩn trong lớp ngoài so với các lớp khác, nó có thể là thành viên kiểuprivate của lớp ngoài. Khi lớp nội (vd: Inner) được khai báo public, nó sẽ được truyxuất thông qua tên của lớp ngoài (vd: Outer) như: Outer.Inner.Ví dụ 5-6 Cách dùng lớp nội using System; using System.Text; public class Fraction { public Fraction(int numerator, int denominator) { this.numerator=numerator; this.denominator=denominator; 42Thừa kế và Đa hình Gvhd: Nguyễn Tấn Trần Minh Kh ...

Tài liệu được xem nhiều: