Възможен дубликат:
Конвенционален въпрос: Кога използвате функция Getter/Setter, вместо да използвате свойство
Напоследък се натъкнах на много различни мнения относно Getters и Setters, така че реших, че трябва да го превърна в собствен въпрос.
Мой предишен въпрос получи незабавен коментар ( по-късно изтрито), че посочените сетери не трябва да имат никакви странични ефекти и методът SetProperty
би бил по-добър избор.
Наистина, това изглежда е мнението на Microsoft също. Въпреки това, техните свойства често предизвикват събития, като Resized
, когато е зададено свойство Width
или Height
на формуляр. OwenP също заявява "не трябва да позволявате на свойство да хвърля изключения, свойствата не трябва да имат странични ефекти, редът не трябва да има значение и свойствата трябва да се връщат сравнително бързо."
И все пак Michael Stum заявява, че трябва да се правят изключения, докато валидиране на данни в сетер. Ако вашият сетер не хвърля изключение, как бихте могли ефективно да валидирате данните, тъй като толкова много от отговорите на този въпрос предлага?
Какво ще кажете, когато трябва да повдигнете събитие, както правят почти всички Control на Microsoft? Тогава не сте ли на милостта на всеки, който се е абонирал за вашето събитие? Ако техният манипулатор изпълни огромно количество информация или сам хвърли грешка, какво се случва с вашия сетер?
И накрая, какво ще кажете за мързеливо зареждане в гетъра? Това също може да наруши предишните насоки.
Какво е приемливо да се постави в getter или setter и какво трябва да се запази само в методите за достъп?
Редактиране:
От друга статия в MSDN :
Методите
get
иset
обикновено не се различават от другите методи. Те могат да изпълняват всяка програмна логика, да хвърлят изключения, да бъдат отменяни и да бъдат декларирани с всякакви модификатори, разрешени от езика за програмиране. Имайте предвид обаче, че свойствата могат да бъдат и статични. Ако дадено свойство е статично, има ограничения за това какво могат да правят методитеget
иset
. Вижте вашия език за програмиране за подробности.