我了解“new”关键字如何隐藏派生类中的方法。但是,它对实现使用关键字的接口的类有什么影响?
考虑这个例子,我决定通过使其属性读/写来扩展接口。
public interface IReadOnly {
string Id {
get;
}
}
public interface ICanReadAndWrite : IReadOnly {
new string Id {
get;
set;
}
}
然后你可以做这样的事情:
public IReadOnly SomeMethod() {
// return an instance of ICanReadAndWrite
}
这是糟糕的设计吗?它会导致我的实现 ICanReadAndWrite 的类出现问题吗?
编辑: 这是一个人为的例子,说明为什么我可能想做这样的事情:
假设我有一个返回 IShoppingCartItemReadWrite 的工厂类。然后我可以有一个服务层来操纵它的价格,改变东西等。然后,我可以将这些对象作为 IShoppingCartItemReadOnly 传递给某种不会改变它们的表示层。(是的,我知道它在技术上可以改变它们——这是一个设计问题,而不是安全性等)