2017-06-27 6 views
1

dieses kurzes Beispiel vor:ein Get/Set Property Aufschalten Be Get-Nur Noch können Sie festlegen Es

class Program 
{ 
    private abstract class PropertyExample 
    { 
     public virtual bool Property { get; set; } 
    } 

    private class GetOnlyProperty : PropertyExample 
    { 
     private bool property = false; 
     public override bool Property => property; 
    } 

    static void Main(string[] args) 
    { 
     GetOnlyProperty example = new GetOnlyProperty(); 
     example.Property = true; 
    } 
} 

Auch wenn ich Property in der GetOnlyProperty Klasse overrode wird nur get-ich noch in der Lage bin um es in Main() einzustellen. Warum ist das möglich?

+0

Überschreiben Sie nicht, markieren Sie es als "neue" –

+0

@MohamedAhmed Das würde immer noch nicht die Fähigkeit, den Eigenschaftswert festlegen zu entfernen. – Servy

+0

Er kann nicht mit dem aktuellen 'Beispiel' Objekt des Typs' GetOnlyProperty' –

Antwort

1

Durch an der erzeugten CIL-Code suchen, es stellt sich heraus, dass Ihr die Getter-Methode überschreiben sie von makking nur in der abgeleiteten Klasse lesen:

public override bool Property => property; 

aber noch erben die Setter, so dass, wenn Sie die Set Eigenschaft haben Sie weiterhin Zugriff auf die Setter-Methode der Basisklasse.

1

Die Sprache kann Ihnen nicht erlauben, das zu tun, was Sie hier erreichen wollen. Das Likov-Substitutionsprinzip erfordert, dass eine abgeleitete Klasse überall dort substituierbar ist, wo eine Basisklasse erwartet wird. Damit diese Eigenschaft zutrifft, muss jedes zugreifbare Mitglied der Basisklassenschnittstelle vorhanden sein und in der abgeleiteten Klasse zugänglich sein.

+1

Warum gibt der Compiler keine Warnung oder einen Fehler aus? Vielleicht ein Versehen? –

+0

@DomnWerner -Maybe, obwohl es mit der gewählten Syntax nicht ganz klar ist, dass Sie beabsichtigen, die Setter-Methode zu überschreiben. – hoodaticus

+1

Willst du damit sagen, dass ich nur den Getter außer Kraft setze? Es war mein Verständnis, dass ich das Eigentum selbst außer Kraft setzte. –

Verwandte Themen