Trình biên dịch C# dường như lưu ý rõ ràng tất cả các giao diện, và các lớp cơ sở của nó thực hiện. Các thông số kỹ thuật của CLI nói rằng điều này không cần thiết. Tôi đã nhìn thấy một số trình biên dịch khác không phát ra điều này một cách rõ ràng, và nó có vẻ hoạt động tốt. Có bất kỳ sự khác biệt hoặc lý do C# thực hiện điều này?Tại sao trình biên dịch C# khai báo rõ ràng tất cả các giao diện một loại thực hiện?
Các MSIL rằng C# ở phía dưới tạo cho B là:
.class private auto ansi beforefieldinit B
extends A
implements IAdvanced,
ISimple
Nó không nên cần phải xác định ISimple, vì A thực hiện nó cũng như IAdvanced. C# mã:
interface ISimple {
int Basic { get; }
int Zero { get; }
}
interface IAdvanced : ISimple {
string Major { get; }
}
class A : ISimple {
int ISimple.Basic {
get { return 1; }
}
int ISimple.Zero {
get{ return 0;}
}
}
class B : A, IAdvanced {
string IAdvanced.Major {
get { return "B"; }
}
}
IIRC, mọi thứ được xác định rõ ràng trong thông số kỹ thuật. Vì vậy, không đoán ở đây. – leppie
Tôi sẽ đi đến số cửa ba! ;-) – peSHIr
Yea, phân vùng II của thông số kỹ thuật CLI làm cho nó khá rõ ràng rằng nó không cần thiết. Tôi không nhìn thấy nếu nó nói rằng thêm nó thực sự làm bất cứ điều gì mặc dù. – MichaelGG