Jak wiadomo, C# przewiduje pola i właściwości, a właściwości się wykorzystuje, jeżeli przypisanie lub odczytanie wartości ma wiązać się z dodatkowymi czynnościami.
Mam takie pytanie czysto teoretyczne. Załóżmy, że ma być pole "Name" i przypisana wartość ma mieć długość do 100 znaków. Przy odczycie wartości pola nie ma być żadnych dodatkowych czynności.
Korzystając z właściwości można zrobić tak:
string Name_;
string Name
{
set
{
if (value.length <= 100)
{
Name_ = value;
}
else
{
throw new Exception("Incorrect value");
}
}
get
{
return Name_;
}
}
To, co powyżej spełnia założenia, ale jest potrzebna dodatkowa zmienna. Niby żaden problem, ale przy dużej ilości takich pól kod się nieco komplikuje i trochę bez sensu dwa elementy klasy w celu obsłużenia tak naprawdę jednego bytu. Jednakże właściwość można zdefiniować w ten sposób:
string Nazwa { get; set }
W tym przypadku jest jeden byt, który jest zarówno właściwością, jak i przechowuje wartość w sobie (nie potrzeba dodatkowej zmiennej), ale przy odczycie lub zapisie nie ma dodatkowych czynności.
Pytanie brzmi: W jaki sposób zaimplementować walidację przypisywanej wartości przez setter bez definiowania wprost dodatkowej zmiennej (a że kompilator i tak sobie ją wygeneruje przy kompilacji to już inny temat)?