Kann nicht abgedichtet werden, da es nicht überschreiben
Habe ich die folgende Klasse:
namespace Warnings
{
public abstract class BaseWarningIntField : IWarningInnerDataField
{
public string PropName;
public string HeaderCaption;
public sealed WarningInnerDataType DataType
{
get { return WarningInnerDataType.Integer; }
}
}
}
Möchte ich die Letzte Eigenschaft DataType
werden nicht überschreibbare, denn das ist die Basis-Klasse für eine Warnung-detail-Feld vom Typ Integer, so muss es immer wieder den richtigen Typ WarningInnerDataType.Integer
.
Sowieso, der compiler gibt mir die folgende Fehlermeldung:
'Warnungen.BaseWarningIntField.Datentyp' kann nicht abgedichtet werden, weil es nicht eine Außerkraftsetzung
Aber, soweit ich weiß, die override
tut genau das Gegenteil von dem, was ich versuche zu erreichen.
- Warum versuchen Sie nicht überschreiben, die Methode in der konkreten Umsetzung? Sie könnten erneut, dass diese Frage nach einem schnellen experiment.
- Nur machen Sie es nicht virual dann, keine Notwendigkeit, um es zu verschließen.
- alternativ verwenden Sie statische nur-Lesen -
- und Methoden zu. Siehe Abschnitt 10.6.5 der Sprache C# spec.
Du musst angemeldet sein, um einen Kommentar abzugeben.
in
C#
alle Methoden standardmäßig nicht virtuell. Sie können nicht überschreiben nicht-virtueller Methoden in sub-Klassen. So verlassen Eigentum wie üblich wird sicher Sie von der Unterklasse überschreiben es.Sealed
ist ein Schlüsselwort in der Klasse als Erklärung für die Vererbung von Beschränkungen oder verwendet wird zu stoppen von virtuellen Kette der Mitglieder einer Klassenhierarchie. Aber wieder - das bezieht sich auf virtuelle Methoden und Eigenschaften.Versuchen zu überschreiben "normal" - Eigenschaft in der sub-Klasse führt kompilieren Fehler
Beantworten, Sie kommentieren, ich werde Euch einige code Beispiele, um meinen Standpunkt darzustellen. Man kann nicht wirklich einschränken, abgeleitete Klassen, vom verstecken einer Methode oder Eigenschaft. Also das nächste situation ist legal und es gibt keine Möglichkeit, Sie zu überwinden (in Bezug auf virtuelle Verfahren und Methoden bezeichnet, mit
new
Stichworten)Die gleiche Weise können Sie nicht einschränken, verstecken, auf ein Feld in einer Klasse von lokalen Variablen, so dass diese situation ist auch gültig. Beachten Sie, dass der compiler wird Ihnen auch helfen, zu beachten, dass Sie versteckt sind, die Klasse Feld, die durch eine lokale variable. Dies auch im Zusammenhang mit
readonly
const
und einfachestatic
Felder als gut.sealed
konkret bedeutet, "zu verhindern, dass dieser bereits virtuelle Methode, die überschrieben wird, weiter", anstatt einfach nur "verhindern, dass diese Methode überschrieben wird".