C # klasse/methoden modifiers

Ik probeer een spreadsheet te maken met klas/methode modifiers. De spreadsheet zelf kan hier worden gevonden, hoewel ik een aantal vragen heb:

1) Tijdens het lezen kunnen de methoden ook sealed zijn, maar wat is het doel hiervan? Beschermingsmethode tegen overheersing?

2) Moeten velden ook van een abstract in een abstracte -klasse zijn?

3) Kan de code virtual body hebben in het gedefinieerde object/klasse?

1
2) Een veldverklaring reserveert opslag zonder mogelijkheid om een ​​interactie te definiëren of opnieuw te definiëren. Overschrijvingen vinden plaats op interacties, zoals methoden en property getters/setters. Het kan in eerste instantie onduidelijk lijken dat u een eigenschap kunt overschrijven, wanneer een eigenschap opslag lijkt te kunnen lijken. Als dat zo is, onthoud dan dat dit gewoon een finesses van C# is; dat wanneer u myProp {get; set;} declareert, het automatisch een achtergrondveld voor u maakt en de interactie daar tegenaan loopt.
toegevoegd de auteur shannon, de bron
je kunt ze allemaal proberen en zien wat er gebeurt
toegevoegd de auteur Sleiman Jneidi, de bron

3 antwoord

1: ja, precies dat; stoppen van een virtuele methode om niet meer te worden overschreven in een subklasse

2: velden zijn nooit abstract; velden zijn implementatie; niets is abstract in een abstracte klasse

3: ja, omdat de virtuele modificator verschilt van de abstracte modifier. Beide vertegenwoordigen een virtuele methode - het verschil is volledig of er een implementatie in de basisklasse is

3
toegevoegd
  1. afgesloten methoden voorkomt verder overschrijven langs de overervingsketen. sealed methoden moeten ook overmatig zoekwoord hebben.

  2. Velden mogen geen abstract zijn. Veld is een variabele op klasseniveau. Je kunt dat niet negeren. Eigenschappen en methoden kunnen abstract zijn, maar dit hoeft niet.

  3. Het verschil tussen de methoden virtueel en abstract is dat de virtuele methode een implementatie heeft. U kunt die implementatie overschrijven in afgeleide klasse.

3
toegevoegd
  1. Ja
  2. Nee - er bestaat niet zoiets als abstract veld, de klasse is abstract, wat betekent dat het niet kan worden geïnstantieerd maar de velden die erop zijn gedefinieerd, maken deel uit van de lay-out van afgeleide niet-abstracte klassen.
  3. Ja
1
toegevoegd