czy metoda pochodzi klasy powinny być traktowane jako nadpisanie metody bazowej klasy o tej samej nazwie często zależy od tego, czy autor metody pochodzi klasy był świadomy metody klasy podstawowej i powiązanej z nią umowy, i napisała metodę klasy pochodnej w celu wypełnienia tej umowy. W większości przypadków, gdy metoda klasy pochodnej ma taką samą nazwę i podpis jak metoda klasy bazowej, metoda klasy pochodnej byłaby przeznaczona do spełnienia umowy bazowej, ale jeśli autor wdrożonej klasy bazowej dodaje nazwę nie zdając sobie sprawy, że ta sama nazwa jest używana w jakimś innym celu w klasie pochodnej, nie można domniemywać, że autor metody klasy pochodnej napisał swoją metodę zgodności z umową dotyczącą metody bazowej, która nie istniała w tym czasie. .
Nie ma żadnych ogólnych środków, dzięki którym C# może stwierdzić, kiedy różne metody zostały dodane do klas, a zatem nie ma możliwości, aby kompilator wiedział, czy autor metody klasy pochodnej wiedział coś o istnieniu czegoś podobnego. nazwana metoda klasy bazowej , chyba że autor metody klasy pochodnej wyraźnie wskazuje kompilatorowi, czy jest świadomy istnienia istnienia klasy bazowej, używając modyfikatorów new
lub override
.
Proponuję interpretacji modyfikatory (lub jej brak) jako:
None - Autor jest nieświadomy istnienia metody klasy bazowej, a zatem nie może oczekiwać, aby wypełniać swoje kontrakt.
new
- Autor zna metodę bazową i z jakiegokolwiek powodu napisał tę metodę, aby jej nie wypełniać.
override
- Autor zna metodę bazową i jej kontrakt, a także napisał tę metodę, aby ją zrealizować.
Powodem domyślnie kompilator zakładając new
ale z ostrzeżeniem, że w przypadkach, gdy metoda jest dodawane do klasy pochodnej, zanim kiedykolwiek istniała metoda baza klasy, nie może być ewentualnie spodziewać autorowi zostały świadomy umowy bazowej i nie może prawdopodobnie zawrzeć umowy, która jeszcze nie istniała, ale w przypadkach, w których metoda klasy pochodnej jest napisana po metodzie bazowej, autor powinien ogólnie wybrać inną nazwę, chyba że autor albo zamierza wypełnić umowę bazową, albo ma konkretny powód używania tej samej nazwy bez wypełniania umowy. Kompilator nie może stwierdzić, która metoda została napisana jako pierwsza, a zatem nie ma możliwości sprawdzenia, które zachowanie jest właściwe.
new nie robi nic (oprócz wyłączenia ostrzeżenia). Ukrywanie dzieje się przez pomijanie. –
Tak, ale podając słowo kluczowe 'new', jawnie ukrywasz element. Chociaż w końcu nic nie zmienia, to dowodzi, że wiesz, co robisz, i przypadkowo nie zapomniałeś słowa kluczowego "override". –
Nie, ukrywanie się też dzieje się bez nowego –