Net framework 5, а также среды Visual Studio 2012 и C#


автоматически реализуемые свойства



Download 6,27 Mb.
Pdf ko'rish
bet191/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   187   188   189   190   191   192   193   194   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

автоматически реализуемые свойства
Если необходимо создать свойства для инкапсуляции резервных полей, то в С# есть 
упрощенный синтаксис, называемый 
автоматически реализуемыми свойствами
(Automatically Implemented Properties, AIP). Приведу пример для свойства 
Name
:
public sealed class Employee {
// Это свойство является автоматически реализуемым
public String Name { get; set; }
private Int32 m_Age;
public Int32 Age {
get { return(m_Age); }
set {
if (value < 0) // value всегда идентифицирует новое значение
throw new ArgumentOutOfRangeException("value", value.ToString(),
"The value must be greater than or equal to 0");
m_Age = value;
}
}
}
Если вы объявите свойства и не обеспечите реализацию методов 
set
и 
get
, то 
компилятор C# автоматически объявит их закрытыми полями. В данном примере 
поле будет иметь тип 
String
— тип свойства. И компилятор автоматически реали-
зует методы 
get_Name
и 
set_Name
для правильного возвращения значения из поля 
и назначения значения полю.
Вы спросите, зачем это нужно, особенно в сравнении с обычным объявлением 
строкового поля 
Name
? Между ними есть большая разница. Использование AIP-
синтаксиса означает, что вы создаете свойство. Любой программный код, имеющий 
доступ к этому свойству, вызывает методы 
get
и 
set
. Если вы позднее решите 
реализовать эти методы самостоятельно, заменив их реализацию, предложенную 


268
Глава.10 .Свойства
компилятором по умолчанию, то код, имеющий доступ к свойству, не нужно будет 
перекомпилировать. Однако если объявить 
Name
как поле и позднее заменить его 
свойством, то весь программный код, имеющий доступ к полю, придется переком-
пилировать, поскольку он будет обращаться к методам свойства.
Лично мне не нравятся автоматически реализуемые свойства, обычно я стараюсь 
их избегать по нескольким причинам.
‰
Синтаксис объявления поля может включать инициализацию, таким образом, 
вы объявляете и инициализируете поле в одной строке кода. Однако нет под-
ходящего синтаксиса для установки при помощи AIP начального значения. 
Следовательно, необходимо неявно инициализировать все автоматически реа-
лизуемые свойства во всех конструкторах.
‰
Механизм сериализации на этапе выполнения сохраняет имя поля в сериали-
зованном потоке. Имя резервного поля для AIP определяется компилятором, 
и он может менять это имя каждый раз, когда компилирует код, сводя на нет воз-
можность десериализации экземпляров всех типов, содержащих автоматически 
реализуемые свойства. Не используйте этот механизм для типов, подлежащих 
сериализации и десериализации.
‰
Во время отладки нельзя установить точку останова в AIP-методах 
set
и 
get

поэтому вы не сможете легко узнать, когда приложение получает и задает значе-
ние автоматически реализуемого свойства. Точки останова можно устанавливать 
только в тех свойствах, которые программист пишет самостоятельно.
Также следует знать, что при использовании AIP свойства должны иметь уровень 
доступа для чтения и записи, так как компилятор генерирует методы 
set
и 
get
. Это 
разумно, поскольку поля для чтения и записи бесполезны без возможности чтения их 
значения, более того, поля для чтения бесполезны, если в них будет храниться только 
значение по умолчанию. К тому же из-за того, что вы не знаете имени автоматически 
генерируемого резервного поля, ваш программный код должен всегда обращаться 
к свойству по имени. И если вы решите явно реализовать один из методов доступа, 
то вам придется явно реализовать оба метода доступа и при этом отказаться от ис-
пользования AIP. Механизм AIP работает слишком бескомпромиссно.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   187   188   189   190   191   192   193   194   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish