Tôi chạy vào một trường hợp cạnh C# lạ và đang tìm kiếm một công việc tốt xung quanh.Tại sao trình biên dịch C# chèn một giao diện thực hiện rõ ràng?
Có một lớp mà tôi không kiểm soát trông như thế này:
namespace OtherCompany
{
public class ClassIDoNotControl
{
public void SomeMethod(string argument)
{
Console.WriteLine((new StackFrame(1).GetMethod().Name));
}
}
}
Tôi muốn kế thừa từ lớp này trong một lớp I làm kiểm soát. Ngoài ra, tôi muốn chỉ định một giao diện trên đó:
interface IInterfaceIDoControl
{
void SomeMethod(string argument);
}
class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
}
Nếu tất cả các tập tin nằm trong cùng một hội đồng, mọi thứ hoạt động tốt:
namespace MyCompany
{
class Program
{
static void Main(string[] args)
{
IInterfaceIDoControl i = new ClassIDoControl();
i.SomeMethod("Hello World!"); // Prints "Main"
}
}
}
Nhưng, nếu tôi di chuyển "ClassIDoNotControl" vào một hội đồng khác, tôi không hiểu những gì tôi mong đợi. Thay vào đó, tôi thấy "MyCompany.IInterfaceIDoControl.SomeMethod" cho đầu ra ngụ ý một khung stack bổ sung.
Lý do là theo bao, các biên dịch C# đang thay đổi "ClassIDoControl" trông như thế này:
class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
void IInterfaceIDoControl.SomeMethod(string argument)
{
base.SomeMethod(argument);
}
}
Có cách nào để tránh trình biên dịch tạo này thêm lớp về mình với giao diện thực hiện một cách rõ ràng ?
Tôi ngạc nhiên khi nó hoạt động trong trường hợp đầu tiên. – Grzenio