Hallo,
irgendwie stehe ich gerade auf dem Schlauch....
Ich habe eine Klasse "Money" diese wird z.B. in der Klasse "Rechnung" verwendet. Da sie dort nur lesbar sein soll, hat sie nur eine get Eigenschaft. Die Klasse Money hat natürlich get/set - und somit ist in der Klasse Rechung trotz der Einsachränkung, dass es keinen Setter änderbar....
Beispiel:
public class Money
{
public decimal _value {get;set}
}
public class Rechnung
{
public Money _netto {get;}
public Money _mwst {get;}
}
Warum sie beschreibbar ist verstehe ich schon, nur wie kann ich es verhindern?
Danke
Stefan
Hi Stefan.Haegele,
eine so deklarierte Eigenschaft braucht immer einen Setter. Sonst könnte man ja auch nie einen Wert zuweisen, der dann gelesen werden soll. Wenn der Setter aber nicht von außen zugreifbar sein soll, kannst du ihn als private
deklarieren:
public Money Netto { get; private set; }
// Edit
Alternativ kannst du die Eigenschaften auch so deklarieren:
private Money netto = new Money();
public Money Netto { get { return netto; } }
Christian
Weeks of programming can save you hours of planning
Zusätzlich zu dem was MrSparkle gepostet hat:
Mach die Money Klasse immutable, d.h. sie kann nur beim erstellen gesetzt werden, danach aber nie wieder geändert werden.
public sealed class Money
{
public Money(decimal value)
{
_value = value;
}
public decimal _value {get; private set;}
}
Und dann machst Du noch readonly
So schützt Du Dich selber (du kannst den Wert nur bei der Deklaration oder aus dem Konstruktor setzen).
Gruss
Programmmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hallo Stefan.Haegele,
public interface IReadOnlyMoney
{
decimal Value { get; }
}
public class Money : IReadOnlyMoney
{
public decimal Value { get; set; }
}
public class Rechnung
{
public IReadOnlyMoney Netto { get; private set; }
public IReadOnlyMoney Mwst { get; private set; }
}
herbivore