interface IBar { void Hidden(); }
class Foo : IBar { public void Visible() { /*...*/ } void IBar.Hidden() { /*...*/ } }
class Program
{
static T CallHidden1<T>(T foo) where T : Foo
{
foo.Visible();
((IBar)foo).Hidden(); //Cast required
return foo;
}
static T CallHidden2<T>(T foo) where T : Foo, IBar
{
foo.Visible();
foo.Hidden(); //OK
return foo;
}
}
Có sự khác biệt nào (CallHidden1 so với CallHidden2) là mã được biên dịch thực tế không? Có sự khác biệt nào khác giữa vị trí T: Foo và T: Foo, IBar (nếu Foo triển khai IBar) khi truy cập các thành viên giao diện được triển khai một cách rõ ràng không?Giao diện và ràng buộc chung chung được thực hiện rõ ràng