... mới có thể
phủ quy t phương thức ToString() của lớp Object.
Boxing và Unboxing dữ liệu
Boxing và unboxing là những xử lý cho phép kiểu dữ liệu giá trị (như int, long, ) được
đối xử như kiểu dữ ... thức ToString( ) trên kiểu dữ liệu int
trong ví dụ 5.4.
Boxing được thực hiện ngầm định
Boxing là một sự chuyển đổi ngầm định của một kiểu dữ liệu giá trị sang kiểu...
... nhẹ. Trong khi các dữ liệu thành viên
private hỗ trợ việc che dấu dữ liệu và sự đóng gói. Một vài người lập trình có cảm giác rằng
điều này phá hỏng cấu trúc. Họ tạo một dữ liệu thành viên public, ... trúc. Những người lập trình khác có cảm giác rằng những thuộc tính cung cấp một
giao diện rõ ràng, đơn giản và việc thực hiện lập trình tốt đòi hỏi phải che dấu dữ liệ...
... quan trọng nhất là trong khi lớp là kiểu
dữ liệu tham chiếu, thì cấu trúc là kiểu dữ lịêu giá trị (Chương 3 đã thảo luận về kiểu dữ liệu
tham chiếu và kiểu dữ liệu giá trị). Do đó cấu trúc thường ... heap.
Một sự nhận xét được rút ra là chúng ta chỉ nên sử dụng những cấu trúc chỉ với những kiểu
dữ liệu nhỏ, và những hành vi hay thuộc tính của nó giống như c...
... số
nguyên numerator. Sau đó ta nối chuỗi với “/” và cuối cùng là chuỗi thể hiện giá trị của mẫu
số.
Với lớp Fraction đã tạo ra, chúng ta thực hiện kiểm tra lớp này. Đầu tiên chúng ta tạo ra hai
phân số ... một cách tường minh, chuyển từ một Fraction ra
một số nguyên:
public static explicit operator int( Fraction theFraction )
{
return theFraction.numerator / theFraction.denominator...
... vào kiểu dữ liệu do
người dùng định nghĩa. Và chúng ta sẽ tìm hiểu các toán tử chuyển đổi để chuyển đổi kiểu dữ
liệu do người dùng định nghĩa một cách tường minh hay ngầm định sang các kiểu dữ liệu
khác.
Sử ... tham số thứ hai. Khi trình biên dịch gặp
biểu thức:
firstFraction + secondFraction
thì trình biên dịch sẽ chuyển biểu thức vào:
Fraction.operator+(firstFraction,...
... i++)
{
Arr[i].Who();
}
}
}
Kế Thừa – Đa Hình
152
.
.
Ngôn Ngữ Lập Trình C#
public class Fraction
{
public Fraction( int numerator, int denominator)
{
this.numerator = numerator;
this.denominator = denominator;
}
public ... StringBuilder();
s.AppendFormat(“{0}/{1}”,numerator, denominator);
return s.ToString();
}
internal class FractionArtist
{
public void Draw( Fraction f)
{
Console.Wr...
... Object
Tất cả các lớp của ngôn ngữ C# của bất cứ kiểu dữ liệu nào thì cũng được dẫn xuất từ lớp
System.Object. Thú vị là bao gồm cả các kiểu dữ liệu giá trị.
Một lớp cơ sở là cha trực tiếp của ... {…}
Kế Thừa – Đa Hình
138
.
.
Ngôn Ngữ Lập Trình C#
}
public class Tester
{
static void Main()
{
Window[] winArray = new Window[3];
winArray[0] = new ListBox( 1, 2, “First List Box...
... thức phủ quy t khi gặp đối tượng mang
hình thức đa hình. Trình biên dịch chịu trách nhiệm trong việc phân ra kiểu dữ liệu thật của
đối tượng để sau này xử lý. Do đó phương thức ListBox.DrawWindow() ... thức DrawWindow() cho từng đối tượng trong
mảng winArray.
for( int i = 0; i < 3 ; i++)
{
winArray[i].DrawWindow();
Kế Thừa – Đa Hình
134
.
.
Ngôn Ngữ Lập Trình C#
}...
... Thừa – Đa Hình
130
.
.
Ngôn Ngữ Lập Trình C#
Hình 5.3 Dẫn xuất từ Window
Giả sử chúng ta bắt đầu tạo một loạt các lớp đối tượng theo hình vẽ 5.3 như bên trên. Sau
khi làm việc với RadioButton, ... Main()
{
// tạo đối tượng cho lớp cơ sở
Window w = new Window(5, 10);
w.DrawWindow();
// tạo đối tượng cho lớp dẫn xuất
ListBox lb = new ListBox( 20, 10, “Hello world!”);
lb.DrawWind...
... Điều khiển truy xuất
Đa hình
Kiểu đa hình
Phương thức đa hình
Từ khóa new và override
Lớp trừu tượng
Gốc của tất cả các lớp - lớp Object
Boxing và Unboxing dữ liệu
Boxing thực hiện ... tập
Trong chương trước đã trình bày cách tạo ra những kiểu dữ liệu mới bằng việc xây
dựng các lớp đối tượng. Tiếp theo chương này sẽ đưa chúng ta đi sâu vào mối...