W swoim drugim bloku kodu tworzonego metodę nastawioną publicznego, ale słowo „override” w deklaracji kompilator szuka metody z tym samym podpisem w klasie bazowej. Ponieważ nie może znaleźć tej metody, nie pozwoli ci utworzyć swojego zestawu.
Jak ArsenMkrt mówi, że możesz zmienić swoją podstawową deklarację, aby zawierała chroniony zestaw. To pozwoli ci to zmienić, ale ponieważ nadal nie będziesz w stanie zmienić podpisu, nie możesz wypromować tej metody na publiczną w swojej podklasie, więc kod, który wysłałeś, nadal nie będzie działał.
Zamiast tego należy dodać publiczną metodę zestawu wirtualnego do swojej klasy bazowej, która niczego nie robi (lub nawet zgłasza wyjątek, jeśli spróbujesz ją wywołać), ale jest to sprzeczne z oczekiwaniami użytkownika klasy zachowanie się tak, jeśli to zrobić (i nie polecam go), upewnij się, że jest tak dobrze udokumentowane, że użytkownik nie może zabraknąć go:
///<summary>
///Get the Text value of the object
///NOTE: Setting the value is not supported by this class but may be supported by child classes
///</summary>
public virtual string Text
{
get { return text; }
set { }
}
//using the class
BaseClass.Text = "Wibble";
if (BaseClass.Text == "Wibble")
{
//Won't get here (unless the default value is "Wibble")
}
przeciwnym razie zadeklarować jako osobny zestaw metody w twoja klasa dziecka:
public override string Text
{
get { return differentText; }
}
public void SetText(string value)
{
differentText = value;
}
Chciałbym zrobić dokładnie to samo. Powinno być możliwe. –
Jest to możliwe, ale wymaga "klasy średniej". Poza tym prawdopodobnie nie jest to dobry pomysł w wielu sytuacjach, ale są pewne wyjątki, na przykład w przypadku nadpisywania właściwości abstrakcyjnych. Podstawa: 'public abstract string Text {get; } '. Środek (dziedziczy bazę): 'chroniony wewnętrzny tekst ciągu;' 'publiczny blokowany tekst zastępujący Tekst {get {return text; }} '. Dziecko (dziedziczy po środku): 'public new string Tekst {get {return text; } set {text = value; }} '. Chroniony modyfikator wewnętrzny i uszczelnione zabezpieczenie zapewniają hermetyzację poza podzespołem. – AnorZaken
@AnorZaken: To nie jest przesłonięcie, to cień. Nie wymaga też klasy "środkowej". – Guffa