Chciałbym wymusić jedynie implementację pobierającego C# na danej właściwości z podstawowej abstrakcyjnej klasy. Klasy pochodne mogą, jeśli chcą, dostarczać także ustawiania dla tej właściwości do publicznego użytku typu statycznie związanego.Zastępowanie abstrakcyjnej właściwości tylko do odczytu dla odczytu/zapisu Właściwość
Biorąc pod uwagę następujące klasa abstrakcyjna:
public abstract class Base
{
public abstract int Property { get; }
}
Jeśli chcę klasę pochodnych, które również implementuje setter, mogę naiwnie spróbować:
public class Derived : Base
{
public override int Property
{
get { return field; }
set { field = value; } // Error : Nothing to override.
}
private int field;
}
Ale wtedy pojawia się błąd składni, odkąd spróbuj zastąpić nieistniejącego ustawiacza. Próbowałem w inny sposób, na przykład deklarując, że seter bazujący jest prywatny i taki, i wciąż natrafiam na wszelkiego rodzaju błędy, które uniemożliwiają mi to. Musi istnieć sposób, aby to zrobić, ponieważ nie narusza to żadnej umowy z klasą podstawową.
Nawiasem mówiąc, można to zrobić za pomocą interfejsów, ale naprawdę potrzebuję tej domyślnej implementacji.
Natknąłem się na tę sytuację tak często, zastanawiałem się, czy istnieje ukryta sztuczka składniowa C# do tego, inaczej po prostu będę z nią żyć i zaimplementuję ręczną metodę SetProperty().
Cross-Link: http://stackoverflow.com/questions/2243886/make-a-read-only-property-writable-in-the-derived-class – Mikhail