Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ПолноС руководство. Π‘# 4.0Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 67

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ свойства Error стало ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π΄Π²ΡƒΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² классСFailSoftArray. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, пСрСмСнная ErrFlag Π±Ρ‹Π»Π° сдСлана Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½Π° слуТит Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ мСстом хранСния Π΄Π°Π½Π½Ρ‹Ρ… для свойства Error, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ доступна нСпосрСдствСнно. И Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π±Ρ‹Π»ΠΎ ввСдСносвойство Error "Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния". Π’Π΅ΠΏΠ΅Ρ€ΡŒ свойство Error Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π΅Ρ…ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, Π³Π΄Π΅ трСбуСтся ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ошибок. ИмСнно это ΠΈ былопродСмонстрировано Π²Ρ‹ΡˆΠ΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Main(), Π³Π΄Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ сгСнСрирована ΠΎΡˆΠΈΠ±ΠΊΠ°Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ Π³Ρ€Π°Π½ΠΈΡ† массива, Π° для Π΅Π΅ обнаруТСния использовано свойство Error.АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ свойства

Начиная с вСрсии C# 3.0, появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ простыхсвойств, Π½Π΅ прибСгая ΠΊ явному ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ управляСт свойство.ВмСсто этого Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для свойства автоматичСски прСдоставляСт компилятор. Π’Π°ΠΊΠΎΠ΅ свойство называСтся автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:Ρ‚ΠΈΠΏ имя { get; set; }

Π³Π΄Π΅ Ρ‚ΠΈΠΏ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ свойства, Π° имя β€” присваиваСмоС свойству имя.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ послС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ аксСссоров get ΠΈ set сразу ΠΆΠ΅ слСдуСт Ρ‚ΠΎΡ‡ΠΊΠ° с запятой, Π° Ρ‚Π΅Π»ΠΎ Ρƒ Π½ΠΈΡ… отсутствуСт. Π’Π°ΠΊΠΎΠΉ синтаксис прСдписываСт компилятору ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ, для хранСния значСния. Вакая пСрСмСнная нСдоступна нСпосрСдствСнно ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ΠΈΠΌΠ΅Π½ΠΈ. Но Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступна Ρ‡Π΅Ρ€Π΅Π· свойство.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объявлСния свойства, автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΈΠΌΠ΅Π½Π΅ΠΌ UserCount.public int UserCount { get; set; }

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² этой строкС ΠΊΠΎΠ΄Π° пСрСмСнная явно Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ. И ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ½ΡΠ»ΠΎΡΡŒΠ²Ρ‹ΡˆΠ΅, компилятор автоматичСски создаСт Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. А Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ свойство UserCount ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²ΡΠ΅ΠΌΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ свойствам.

Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… свойств автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ свойство Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π±Ρ‹Ρ‚ΡŒ доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для записи. ΠŸΡ€ΠΈ объявлСнии этого свойства Π² любом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π° аксСссора β€” get ΠΈ set. Π₯отя Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ (Ρ‚.Π΅. ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ свойство доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ длячтСния ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для записи) всС ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ, объявив Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ аксСссор ΠΊΠ°ΠΊ private(ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом β€” Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа Π² аксСссорах").

НСсмотря Π½Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ удобства автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… свойств, ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ограничиваСтся Π² основном Ρ‚Π΅ΠΌΠΈ ситуациями, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ трСбуСтся управлСниСустановкой ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ. Напомним, Ρ‡Ρ‚ΠΎΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ нСдоступно Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ свойство, нСльзя Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠΌΠ΅Π½Π° автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Ρ… свойств просто Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΠΎΠ±ΠΎΠΉ ΠΈΠΌΠ΅Π½Π° самих ΠΏΠΎΠ»Π΅ΠΉ, Π° Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ это ΠΈ трСбуСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. АвтоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ свойства ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΈ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ для ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΡ…ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈ для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ срСдства проСктирования.ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² свойствах

Как пояснялось Π² Π³Π»Π°Π²Π΅ 8, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° примСняСтся Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ явному Π²Ρ‹Π·ΠΎΠ²Ρƒ конструктора ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ свойств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ трСбуСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈ этом синтаксис ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² оказываСтся ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΊΠ°ΠΊ для свойств, Ρ‚Π°ΠΊ ΠΈ для ΠΏΠΎΠ»Π΅ΠΉ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΈΠ· Π³Π»Π°Π²Ρ‹ 8, измСнСнная с Ρ†Π΅Π»ΡŒΡŽ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² свойствах. Напомним, Ρ‡Ρ‚ΠΎ Π² вСрсии этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· Π³Π»Π°Π²Ρ‹ 8 использовались поля, Π° привСдСнная Π½ΠΈΠΆΠ΅ вСрсия отличаСтся лишь Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ поля CountΠΈ Str ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½Ρ‹ Π² свойства. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя синтаксис ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² нСизмСнился.// ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² свойствах.using System;class MyClass { // Π’Π΅ΠΏΠ΅Ρ€ΡŒ это свойства. public int Count { get; set; } public string Str { get; set; }}class ObjInitDemo { static void Main() { // Π‘ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° MyClass с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². MyClass obj = new MyClass { Count = 100, Str = "ВСстированиС" }; Console.WriteLine(obj.Count + " " + obj.Str); }}

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, свойства Count ΠΈ Str ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² выраТСниях с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΈΠ· Π³Π»Π°Π²Ρ‹ 8, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:100 ВСстированиС

Как пояснялось Π² Π³Π»Π°Π²Π΅ 8, синтаксис ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° оказываСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π² LINQ-выраТСниях.А Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… конструкторов.ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ, присущиС свойствам

Бвойствам присущ ряд сущСствСнных ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, свойство Π½Π΅ опрСдСляСт мСсто для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ поэтому Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π² качСствСпарамСтра ref ΠΈΠ»ΠΈ out. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, свойство Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅. НаличиС Π΄Π²ΡƒΡ…Ρ€Π°Π·Π½Ρ‹Ρ… свойств с доступом ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ допускаСтся, Π½ΠΎ это, скорСС,ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, свойство Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ аксСссора get. И хотя это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ компилятором, Π΅Π³ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ считаСтся сСмантичСской ошибкой. ДСйствиС аксСссора get Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½ΠΎΡΠΈΡ‚ΡŒ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа Π² аксСссорах

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ аксСссоров set ΠΈ get оказываСтся Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ уиндСксатора ΠΈ свойства, Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ. Π’Π°ΠΊ, Ссли свойство ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡΠΊΠ°ΠΊ public, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΅Π³ΠΎ аксСссоры set ΠΈ get Ρ‚Π°ΠΊΠΆΠ΅ становятся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ(public). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ для аксСссора set ΠΈΠ»ΠΈ get ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ собствСнный ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ private. Но Π² любом случаС Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ аксСссора,опрСдСляСмая Ρ‚Π°ΠΊΠΈΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ, Ρ‡Π΅ΠΌ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, указываСмая для Π΅Π³ΠΎ свойства ΠΈΠ»ΠΈ индСксатора.

БущСствуСт Ρ†Π΅Π»Ρ‹ΠΉ ряд ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ аксСссора. Допустим, Ρ‡Ρ‚ΠΎ трСбуСтся ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свободный доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ свойства,Π½ΠΎ вмСстС с Ρ‚Π΅ΠΌ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ это свойство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π»Π΅Π½Π°ΠΌ Π΅Π³ΠΎ класса.Для этого достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ аксСссор Π΄Π°Π½Π½ΠΎΠ³ΠΎ свойства ΠΊΠ°ΠΊ private. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ свойство MyProp, аксСссор set ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊprivate.// ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа Π² аксСссорС.using System;class PropAccess { int prop; // ΠΏΠΎΠ»Π΅, управляСмоС свойством ΠœΡƒΠ rΠΎΡ€ public PropAccess() { prop = 0; } /* Π­Ρ‚ΠΎ свойство обСспСчиваСт доступ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ экзСмпляра prop. Оно Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ prop ΠΈΠ· любого ΠΊΠΎΠ΄Π°, Π½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π»Π΅Π½Π°ΠΌ своСго класса. */ public int ΠœΡƒΠ rΠΎΡ€ { get { return prop; } private set { // Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ это Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ аксСссор prop = value; } } // Π­Ρ‚ΠΎΡ‚ Ρ‡Π»Π΅Π½ класса ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства ΠœΡƒΠ rΠΎΡ€. public void IncrProp() { MyProp++; // ДопускаСтся Π². Ρ‚ΠΎΠΌ ΠΆΠ΅ самом классС. }}// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа Π² аксСссорС свойства.class PropAccessDemo { static void Main() { PropAccess ob = new PropAccess(); Console.WriteLine("ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ob.ΠœΡƒΠ rΠΎΡ€: " + ob.ΠœΡƒΠ rΠΎΡ€); // ob.ΠœΡƒΠ rΠΎΡ€ = 100; // нСдоступно для установки ob.IncrProp(); Console.WriteLine("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ob.ΠœΡƒΠ rΠΎΡ€ послС инкрСмСнтирования: " + ob.ΠœΡƒΠ rΠΎΡ€); }}

Π’ классС PropAccess аксСссор set ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ private. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ IncrProp(), Π½ΠΎ нСдоступСн для ΠΊΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ класса PropAccess. ИмСнно поэтому ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒΡΠ²ΠΎΠΉΡΡ‚Π²Ρƒ ob.ΠœΡƒΠ rΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² классС PropAccessDemo Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°.

ВСроятно, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ аксСссорам оказываСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ дляработы с автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ свойствами. Как пояснялось Π²Ρ‹ΡˆΠ΅, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒΠ°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ΅ свойство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ ΠΆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для записинСльзя, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π° аксСссора, get ΠΈ set, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΡ€ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠΈΡ‚Π°ΠΊΠΎΠ³ΠΎ свойства. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° всС ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ, объявиводин ΠΈΠ· аксСссоров автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ свойства ΠΊΠ°ΠΊ private. Π’ качСствСпримСра Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ объявлСниС автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ свойства Lengthдля класса FailSoftArray, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ фактичСски становится доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ длячтСния.public int Length { get; private set; }