Ngôn Ngữ Lập Trình C#
public class Fraction
{
public Fraction( int numerator, int denominator)
{
this.numerator = numerator;
this.denominator = denominator;
}
public override string ToString()
{
StringBuilder s = new StringBuilder();
s.AppendFormat(“{0}/{1}”,numerator, denominator);
return s.ToString();
}
internal class FractionArtist
{
public void Draw( Fraction f)
{
Console.WriteLine(“Drawing the numerator {0}”, f.numerator);
Console.WriteLine(“Drawing the denominator {0}”, f.denominator);
}
}
// biến thành viên private
private int numerator;
private int denominator;
}
public class Tester
{
static void Main()
{
Fraction f1 = new Fraction( 3, 4);
lớp dẫn xuất từ lớp trừu tượng này. Do chỉ là lớp trừu tượng, không có sự thực thi nên chúng
ta không thể tạo thể hiện hay tạo đối tượng cho lớp trừu tượng này.
Câu hỏi 3: Có phải khi tạo một lớp thì phải kế thừa từ một lớp nào không?
Trả lời 3: Không nhất thiết như vậy, tuy nhiên trong C#, thì tất cả các lớp được tạo điều phải
dẫn xuất từ lớp Object. Cho dù chúng có được khai báo tường minh hay không. Do đó Object
là lớp gốc của tất cả các lớp được xây dựng trong C#. Một điều thú vị là các kiểu dữ liệu giá
trị như kiểu nguyên, thực, ký tự cũng được dẫn xuất từ Object.
Câu hỏi 4: Lớp lồng bên trong một lớp là như thế nào?
Trả lời 4: Lớp lồng bên trong một lớp hay còn gọi là lớp nội được khai báo với từ khóa
internal, chứa bên trong phạm vi của một lớp. Lớp nội có thể truy cập được các thành viên
private của lớp mà nó chứa bên trong
Câu hỏi 5: Có thể kế thừa từ một lớp cơ sở được viết trong ngôn ngữ khác ngôn ngữ C#?
Trả lời 5: Được, một trong những đặc tính của .NET là các lớp có thể kế thừa từ các lớp
được viết từ ngôn ngữ khác. Do vậy, trong C# ta có thể kế thừa một lớp được viết từ ngôn
ngữ khác của .NET. Và những ngôn ngữ khác cũng có thể kế thừa từ các lớp C# mà ta tạo ra.
Câu hỏi thêm
Câu hỏi 1: Sự đặt biệt hóa được sử dụng trong C# thông qua tính gì?
Câu hỏi 2: Khái niệm đa hình là gì? Khi nào thì cần sử dụng tính đa hình?
Câu hỏi 3: Hãy xây dựng cây phân cấp các lớp đối tượng sau: Xe_Toyota, Xe_Dream,
Xe_Spacy, Xe_BMW, Xe_Fiat, Xe_DuLich, Xe_May, Xe?
Kế Thừa – Đa Hình
149
.
.
Ngôn Ngữ Lập Trình C#
Câu hỏi 4: Từ khóa new được sử dụng làm gì trong các lớp?
Câu hỏi 5: Một phương thức ảo trong lớp cơ sở có nhất thiết phải được phủ quyết trong lớp
dẫn xuất hay không?
Câu hỏi 6: Lớp trừu tượng có cần thiết phải xây dựng hay không? Hãy cho một ví dụ về một
lớp trừu tượng cho một số lớp.
this.name = name;
}
Kế Thừa – Đa Hình
150
.
.
Ngôn Ngữ Lập Trình C#
// phương thức trừu tượng minh họa việc
// đưa tên của đối tượng
abstract public void Who();
// biến thành viên protected
protected string name;
}
// lớp Dog dẫn xuất từ lớp Animal
public class Dog : Animal
{
// hàm khởi dựng lấy hai tham số
public Dog(string name, string color) : base(name)
{
this.color = color;
}
// phủ quyết phương thức trừu tượng Who()
public override void Who( )
{
Console.WriteLine(“Gu gu! Toi la {0} co mau long {1}”, name, color);
}
// biến private của lớp
private string color;
}
public class Cat : Animal
}
}
}
Kế Thừa – Đa Hình
152
.
.