Trong C#, các thành viên của interface có thể được triển khai theo hai cách: tường minh (explicit) hoặc ngầm (implicit).
Triển khai ngầm (Implicit Implementation)
- Không bao gồm tên interface trước tên thành viên, trình biên dịch sẽ tự suy luận.
- Các thành viên được public và có thể truy cập khi đối tượng được cast về kiểu cụ thể (concrete type).
- Cách gọi phương thức không khác biệt: chỉ cần tạo đối tượng của lớp và gọi trực tiếp.
- Hạn chế: Không thể dùng triển khai ngầm nếu có trùng tên phương thức trong nhiều interface.
Ví dụ minh họa
interface ICar {
void DisplayCar();
}
interface IBike {
void DisplayBike();
}
class ShowRoom : ICar, IBike
{
public void DisplayCar()
{
Console.WriteLine("Hiển thị xe hơi");
}
public void DisplayBike()
{
Console.WriteLine("Hiển thị xe máy");
}
}
class Program
{
static void Main()
{
ICar car = new ShowRoom();
IBike bike = new ShowRoom();
car.DisplayCar(); // Gọi qua interface
bike.DisplayBike(); // Gọi qua interface
ShowRoom room = new ShowRoom();
room.DisplayCar(); // Gọi trực tiếp qua class
}
}
Khi nào nên dùng Implicit Implementation?
- Khi các interface không có thành viên trùng tên.
- Khi muốn code đơn giản, dễ đọc và gọi phương thức trực tiếp trên đối tượng class.
- Khi không cần ẩn đi chi tiết triển khai khỏi người dùng class.
Lưu ý quan trọng
Nếu hai interface có phương thức cùng tên (ví dụ: void Display()), bạn bắt buộc phải dùng explicit implementation để phân biệt.