Tài liệu Kế Thừa-Đa Hình phần 3 - Pdf 10

abstract public void DrawWindow( );
Do phương thức không cần phần thực thi, nên không có dấu ({}) mà chỉ có dấu chấm
phẩy (;)
sau phương thức. Như thế với phương thức DrawWindow() được thiết kế là trừu tượng
thì chỉ cần câu lệnh trên là đủ.
Nếu một hay nhiều phương thức được khai báo là trừu tượng, thì phần định nghĩa lớp
phải được khai báo là abstract, với lớp Window ta có thể khai báo là lớp trừu tượng nh
ư
sau:
abstract public void Window
Ví dụ 5.3 sau minh họa việc tạo lớp Window trừu tượng và phương thức trừu
tượng
DrawWindow() của lớp Window.
Ví dụ 5.3: Sử dụng phương thức và lớp trừu tượng. using System;

abstract public class Window

{// hàm khởi dựng lấy hai tham số
public Window( int top, int left)
{

this.top = top;
listBoxContents = contents;

}// phủ quyết phương thức trừu tượng DrawWindow()

public override void DrawWindow( )

{Console.WriteLine(“Writing string to the listbox: {0}”, listBoxContents);

}// biến private của lớp

private string listBoxContents;

}// lớp Button dẫn xuất từ lớp
Window public class Button :
Window
{

static void Main()

{Window[] winArray = new Window[3];

winArray[0] = new ListBox( 1, 2, “First List Box”);
winArray[1] = new ListBox( 3, 4, “Second List
Box”); winArray[2] = new Button( 5, 6);
for( int i=0; i <3 ; i++)

{winArray[i].DrawWindow( );

}

}

}
Trong ví dụ 5.3, lớp Window được khai báo là lớp trừu tượng và do vậy nên chúng ta
không
thể tạo bất cứ thể hiện nào của lớp Window. Nếu chúng ta thay thế thành viên đầu
tiên của mảng:
winArray[0] = new ListBox( 1, 2, “First List Box”);

hiện của chính lớp trừu tượng Window.
Ý nghĩa của một lớp trừu tượng được bao hàm trong chính từ “trừu tượng”. Lớp này
dùng để thực thi một “Window” trừu tượng, và nó sẽ được biểu lộ trong các thể
hiện xác định của Windows, như là Button, ListBox, Frame,
Các lớp trừu tượng không thể thực thi được, chỉ có những lớp xác thực tức là những
lớp dẫ
n xuất từ lớp trừu tượng này mới có thể thực thi hay tạo thể hiện. Một sự thay
đổi việc sử dụng trừu tượng là định nghĩa một giao diện (interface), phần này sẽ
được trình bày trong Chương 8 nói về giao diện.
Lớp cô lập (sealed class)

Ngược với các lớp trừu tượng là các lớp cô lập. Một lớp trừu tượng được thiết kế
cho các
lớp dẫn xuấ
t và cung cấp các khuôn mẫu cho các lớp con theo sau. Trong khi một lớp
cô lập
thì không cho phép các lớp dẫn xuất từ nó. Để khai báo một lớp cô lập ta dùng
từ khóa sealed đặt trước khai báo của lớp không cho phép dẫn xuất. Hầu hết các
lớp thường được đánh dấu sealed nhằm ngăn chặn các tai nạn do sự kế thừa gây ra.
Nếu khai báo của lớp Window trong ví dụ 5.3 được thay đổi từ khóa abstract bằng
từ khóa sealed
(cũng có thể loại bỏ từ khóa trong khai báo của phương thức
DrawWindow()). Chương trình sẽ bị lỗi khi biên dịch. Nếu chúng ta cố thử biên dịch
chương trình thì sẽ nhận được lỗi từ trình biên dịch:

‘ListBox’ cannot inherit from sealed class ‘Window’
Đây chỉ là một lỗi trong số những lỗi như ta không thể tạo một phương thức thành
viên
protected trong một lớp khai báo là sealed.


Ty
p
e( )
Cung cấp kiểu của đối tượng
ToS
t
ring( )
Cung cấp chuỗi thể hiện của đối tượng
Finalize( )
Dọn dẹp các tài nguyên
MemberwiseClone(
)
Tạo một bản sao từ đối tượng.
Bảng 5.1: Tóm tắt các phương thức của lớp Object.
Ví dụ 5.4 sau minh họa việc sử dụng phương thức ToString( ) thừa kế từ lớp Object.
Ví dụ 5.4: Thừa kế từ Object. using System;

public class SomeClass

{public SomeClass( int val )

{
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());

Console.WriteLine(“The value of 5 is {0}”,5.ToString());

}

}
Kết quả:
The value of i is: 5

The value of s is 7

The value of 5 is 5

Trong tài liệu của lớp Object phương thức ToString() được khai báo như sau:

public virtual string ToString();
Đây là phương thức ảo public, phương thức này trả về một chuỗi và không nhận tham số.
Tất
cả kiểu dữ liệu được xây dựng sẵn, như kiểu int, dẫn xuất từ lớp Object nên nó cũng có

đối tượng cần dùng và sao chép giá trị trên vào đối tượng mới tạo. Ta có hình vẽ
sau minh họa quá trình Boxing một số nguyên. Hì
nh 5.5: Boxing số nguyên.
Boxing được thực hiện ngầm định khi chúng ta đặt một kiểu giá trị vào một tham chiếu
đang chờ đợi và giá trị sẽ được đưa vào đối tượng một cách tự động ngầm định. Ví dụ,
nếu chúng ta gán một kiểu dư liệu cơ bản như kiểu nguyên int vào một biến kiểu Object
(điều này hoàn toàn hợp lệ vì ki
ểu int được dẫn xuất từ lớp Object) thì giá trị này sẽ
được đưa vào biến Object, như minh họa sau:
using System;

class Boxing

{



Hình 5.6: Unboxing sau khi thực hiện
Boxing.
Để thực hiện unboxing thành công,
thì đối tượng được unboxing phải
được tham chiếu đến một đối tượng,
và đối tượng này đã được tạo ra
bằng việc boxing một giá trị cùng
với kiểu của giá trị được đưa ra.
Boxing và Unboxing được minh họa
trong ví dụ 5.5.
Ví dụ 5.5: Boxing và Unboxing. using System;

public class UnboxingTest

{public static void Main()

{int i = 123;

// Boxing
object o = i;


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status