Hãy nói rằng tôi có một giao diện mà nhiều nhiều lớp riêng biệt thực hiện:Giải pháp cho việc không thể đặt mã trong giao diện
public interface IHaveObjects
{
object firstObject();
}
(Lưu ý: Tôi không thể làm cho nó một lớp cơ sở trừu tượng như implementors của IHaveObjects thể đã có một lớp cơ sở.)
Bây giờ tôi muốn thêm một phương thức mới vào giao diện, để một người triển khai giao diện có thể có hành vi đặc biệt cho giao diện đó. Lý tưởng nhất là tôi sẽ làm một cái gì đó như thế này:
public interface IHaveObjects
{
object firstObject();
object firstObjectOrFallback()
{
return firstObject();
}
}
sau đó đi đến đó một implementor của giao diện và cung cấp cho nó ghi đè:
public class ObjectHaverPlus : IHaveObjects
{
public override object IHaveObjects.firstObjectOrFallback()
{
return firstObject() ?? getDefault();
}
}
Tuy nhiên nó bị cấm trong C# để cung cấp một cơ thể phương pháp trong một giao diện và tôi muốn tránh mọi người triển khai IHaveObjects
để thả xuống định nghĩa firstObjectOrFallback()
. (Hãy tưởng tượng nếu có hàng trăm hoặc hàng nghìn)
Có cách nào để thực hiện việc này mà không cần dán nhiều bản sao không?
Tại sao không tạo giao diện thứ hai cho trường hợp đặc biệt đó? Bạn không thể có nhiều thừa kế các lớp, nhưng bạn có thể thực hiện nhiều giao diện. – Tim