Sie sollten keine Felder verwenden, die geschützt sind, da Versionierung und Zugriff nicht geschützt werden können. Siehe die Field Design Richtlinien. Ändern Sie Ihr Feld in eine Eigenschaft, die Sie dazu zwingt, in den Namen zu wechseln (da Sie nicht zwei Eigenschaften mit demselben Namen haben können). Oder, wenn möglich, machen Sie das geschützte Feld privat.
Um Ihre Immobilie auf die nur die Vererbungsklassen, verwenden Sie einen geschützten Setter machen Einstellung:
public class Dimension : Text
{
private string _textPrefix;
private double _absoluteDistance;
/// <summary>
/// Gets the real measured distance.
/// </summary>
public double Distance
{
get { return _absoluteDistance }
protected set { _absoluteDistance = Math.Abs(distance);
}
}
Obwohl diese Divergenz verursacht zwischen erhalten und eingestellt, wie Funktionalität ist nicht das Gleiche. Vielleicht eine separate geschützte Methode würde in diesem Fall besser sein:
public class Dimension : Text
{
private string _textPrefix;
/// <summary>
/// Gets the real measured distance.
/// </summary>
public double Distance { get; private set; }
protected void SetAbsoluteDistance(double distance)
{
Distance = Math.Abs(distance);
}
}
Ich würde persönlich das Feld privat machen, um damit zu beginnen. Warum brauchst du wirklich das zu schützende Feld? –
Benennen Sie stattdessen das Feld '_distance'? –
@Jon: Wir brauchen den tatsächlichen Wert in abgeleiteten Klassen – abenci