"new"キーワードが派生クラスのメソッドを隠す方法を理解しています。ただし、キーワードを使用するインターフェイスを実装するクラスにはどのような影響がありますか?C#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として、それらを変更しない種類のプレゼンテーションレイヤーに渡すことができます。 (はい、技術的にははに変更できます。これは設計上の質問であり、セキュリティなどはありません)
具体的な例はあまり意味がありません。読み書きができれば、読み込み専用ではありません。 –
IShoppingCartItemReadWriteは変更できますが、IShoppingCartItemReadOnlyへの参照がある場合は、別のものにキャストしない限り読み取り専用です。 – user10789
実際にはそこに「新しい」キーワードが必要ないことに注意してください。 –