Rozumiem, jak słowo kluczowe "nowe" może ukryć metody w klasie pochodnej. Jakie są jednak implikacje dla klas implementujących interfejsy wykorzystujące słowo kluczowe?Czy możesz użyć słowa kluczowego C#, aby rozwinąć właściwości w interfejsie?
Rozważmy ten przykład, w którym decyduję się rozwinąć interfejs, zmieniając jego właściwości w odczyt/zapis.
public interface IReadOnly {
string Id {
get;
}
}
public interface ICanReadAndWrite : IReadOnly {
new string Id {
get;
set;
}
}
Wtedy jesteś w stanie robić takie rzeczy:
public IReadOnly SomeMethod() {
// return an instance of ICanReadAndWrite
}
Czy to zły projekt? Czy spowoduje to problemy dla moich klas, które implementują ICanReadAndWrite?
Edit: Oto zmyślony przykład dlaczego może chcę zrobić coś takiego:
że mam klasy fabrycznej, która zwraca IShoppingCartItemReadWrite. Mogę wtedy mieć warstwę usługową, która manipuluje cenami, zmienia rzeczy itp. Następnie mogę przekazać te obiekty jako IShoppingCartItemReadOnly do jakiejś warstwy prezentacji, która ich nie zmieni. (Tak, wiem, że to technicznie możliwezmiana them-- jest to kwestia projektu, nie bezpieczeństwa, itd.)
Twój konkretny przykład nie ma większego sensu. Jeśli potrafisz czytać i pisać, to nie jest to tylko czytanie. –
Znacznik IShoppingCartItemReadWrite można zmienić, ale jeśli mam odwołanie do IShoppingCartItemReadOnly, to jest on tylko do odczytu, chyba że go rzucisz na coś innego. – user10789
Pamiętaj, że nie potrzebujesz w tym miejscu słowa kluczowego "new". –