Microsoft có một số detailed write up về chủ đề này nhưng nó sẽ tóm tắt việc triển khai nhiều giao diện/lớp học có cùng phương pháp trong đó. Ngụ ý không còn hoạt động trong ngữ cảnh đó.
class Test
{
static void Main()
{
SampleClass sc = new SampleClass();
IControl ctrl = (IControl)sc;
ISurface srfc = (ISurface)sc;
// The following lines all call the same method.
sc.Paint();
ctrl.Paint();
srfc.Paint();
}
}
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
class SampleClass : IControl, ISurface
{
// Both ISurface.Paint and IControl.Paint call this method.
public void Paint()
{
Console.WriteLine("Paint method in SampleClass");
}
}
// Output:
// Paint method in SampleClass
// Paint method in SampleClass
// Paint method in SampleClass
Nếu chúng tôi có cách tiếp cận rõ ràng, chúng tôi sẽ kết thúc với điều này.
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
Tất cả đều được cung cấp để cung cấp tính duy nhất khi các loại thực hiện xung đột. Trong ví dụ của bạn, Foo
làIFoo
.
Nguồn
2012-12-19 19:47:08
Tại sao bạn lại làm điều này? Bạn có hiệu quả buộc người dùng của 'Foo' vào việc thực hiện cụ thể, làm cho chế nhạo cho các bài kiểm tra đơn vị khó khăn, và nói chung tăng khớp nối trong ứng dụng của bạn ... –
Hai cách tiếp cận là khá nhiều độc quyền. Cả hai đều có tác dụng nhưng có mục đích khác nhau. Bạn sẽ không sử dụng cả hai cách tiếp cận cho cùng một giao diện trong cùng một lớp cụ thể (ít nhất là không phải là tôi có thể nghĩ đến) – dkackman
@SteveCzetty Do đó câu hỏi của OP; nơi thực hiện một cách rõ ràng giao diện là cần thiết. –