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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 158

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

Бвойства класса Employee

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ свойствам Name ΠΈ Salary. Бинтаксис C# для объявлСния свойства сущСствСнно отличаСтся ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ синтаксиса VB, Π½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа (accessors) соотвСтствСнно для "получСния" ΠΈ "задания" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ свойства. Π’ VB ΠΎΠ½ΠΈ синтаксичСски ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½ΠΎ Π² C# свойство ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² Ρ†Π΅Π»ΠΎΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния свойства.

public decimal Salary {

 get {

  return salary;

 }

 set {

  salary = value;

 }

}

Π’ VB компилятор Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ опрСдСляСтся свойство, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Property. Π’ C# эта информация пСрСдаСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ свойства Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ слСдуСт ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ фигурная скобка. Если опрСдСляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ скобка, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π°Ρ‡Π°Π»ΠΎ списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ для поля это Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΠ° с запятой, ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‰Π°Ρ ΠΊΠΎΠ½Π΅Ρ† опрСдСлСния.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа get ΠΈ set Π½Π΅ содСрТат Π½ΠΈΠΊΠ°ΠΊΠΈΡ… списков ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², это Π½Π΅ Π²Π°ΠΆΠ½ΠΎ. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Salary являСтся дСсятичным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа get Π²Π΅Ρ€Π½Π΅Ρ‚ дСсятичноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа set Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ дСсятичный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ void. Для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ доступа set этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ явно, Π½ΠΎ компилятор всСгда ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ слово value ΠΊΠ°ΠΊ ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅Π΅ΡΡ Π½Π° Π½Π΅Π³ΠΎ.

Π—Π΄Π΅ΡΡŒ снова синтаксис опрСдСлСния свойств ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² случаС C# ΠΎΠ½ являСтся Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Π²Π²ΠΎΠ΄ ΠΊΠΎΠ΄Π°.

Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² VB, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свойство ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Ρ‚ΠΎ просто опускаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа set, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ сдСлано для свойства Name:

public string Name {

 get {

  return name;

 }

}

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Employee

Π’ классС Employee ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” GetMonthlySalary() ΠΈ ToString().

GetMonthlySalary() Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ большая Ρ‡Π°ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ синтаксиса C# ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° рассмотрСна. БСрСтся Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°, дСлится Π½Π° 12 для прСобразования ΠΈΠ· Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π² ΠΌΠ΅ΡΡΡ‡Π½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ, ΠΈ возвращаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

public decimal GetMonthlyPayment() {

 return salary/12;

}

ЕдинствСнным Π½ΠΎΠ²Ρ‹ΠΌ элСмСнтом синтаксиса здСсь являСтся инструкция return. Π’ VB Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, задавая Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ имя, ΠΊΠ°ΠΊ ΠΈ функция

GetMonthlyPayment = mCurSalary/12

Π’ C# Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚, добавляя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ return (Π±Π΅Π· скобок). Π’Π°ΠΊΠΆΠ΅ return Π² C# опрСдСляСт, Ρ‡Ρ‚ΠΎ происходит Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, поэтому инструкция C#:

return salary/12;

эквивалСнтна Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ VB:

GetMonthlyPayment = mCurSalary/12

Exit Function

ΠœΠ΅Ρ‚ΠΎΠ΄ ToString() Π±ΠΎΠ»Π΅Π΅ интСрСсСн. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΡ€ΠΈ написании класса C# Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ созданиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ToString(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для получСния быстрого просмотра содСрТимого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ ToString() ΡƒΠΆΠ΅ доступСн, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС классы Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π΅Π³ΠΎ ΠΎΡ‚ System.Object. Однако вСрсия Π² System.Object Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя класса ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· экзСмпляра класса. Компания Microsoft ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»Π° этот ΠΌΠ΅Ρ‚ΠΎΠ΄ для всСх числовых Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (int, float ΠΈ Ρ‚.Π΄.), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈ нСлишнС Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС для собствСнных классов программиста. Π’ любом случаС это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для просмотра содСрТимого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ:

publiс override string ToString() {

 return Name: " + name + ", Salary: $" + salary.ToString();

}

Π­Ρ‚Π° пСрСопрСдСлСнная вСрсия Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ имя ΠΈ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ сотрудника. Новым элСмСнтом синтаксиса являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ объявлСн ΠΊΠ°ΠΊ override. C# Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСопрСдСляСмыС вСрсии ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎΠΌΠ΅Ρ‡Π°Π»ΠΈΡΡŒ явно, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции, Ссли этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ риск Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок, ΠΊΠΎΠ³Π΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ случайно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Π΅Π· Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ зная, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡƒΠΆΠ΅ присутствуСт Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС.

ΠœΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ класса Employee ΠΊΠ°ΠΊ Π² VB, Ρ‚Π°ΠΊ ΠΈ Π² C#, ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€, хотя ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСровности Π² создании ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ экзСмпляра Employee Π² вСрсии VB, ΠΎΠ±Π° языка ΡΠΏΡ€Π°Π²ΠΈΠ»ΠΈΡΡŒ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ с трСбованиями. Однако ΠΎΠ΄Π½Π° ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ этого прилоТСния состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ C# ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуациях Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ VB6. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства Π² Π²Π΅Ρ€ΡΠΈΡŽ C# нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ оставят VB Π΄Π°Π»Π΅ΠΊΠΎ ΠΏΠΎΠ·Π°Π΄ΠΈ. НачнСм со статичСских ΠΏΠΎΠ»Π΅ΠΉ ΠΈ свойств.

БтатичСскиС Ρ‡Π»Π΅Π½Ρ‹

ΠœΡ‹ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ нСсколько Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ Π² C# классы ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ статичСскими, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, Π½Π΅ создавая экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Π² VB. ЀактичСски, статичСскими ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½ΠΎ ΠΈ поля, свойства ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ класса.

Π’Π΅Ρ€ΠΌΠΈΠ½ статичСский ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² C#, Ρ‡Π΅ΠΌ Π² VB.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ статичСскиС Ρ‡Π»Π΅Π½Ρ‹ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ прСдставим сСбС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ класс Employee ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ названия (ΠΈΠΌΠ΅Π½ΠΈ) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сотрудник. Π—Π΄Π΅ΡΡŒ имССтся сущСствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ сотрудника, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сотрудника прСдставляСт ΠΎΠ±ΠΎΡΠΎΠ±Π»Π΅Π½Π½ΡƒΡŽ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΈ поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° сотрудников. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ классов Π² VB ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ»Π΅ΠΉ Π² C#. Но Ссли организация ΠΊΡƒΠΏΠΈΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит класс Employee, Ρ‚ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° всСх сотрудников приходится ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ имя ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сотрудника. Π‘ΡƒΠ΄Π΅Ρ‚ просто Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строки. ВмСсто этого ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ имя ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ доступ ΠΊ этим Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ сотрудника. ИмСнно Ρ‚Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ статичСскоС ΠΏΠΎΠ»Π΅. Объявим Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΊ companyName:

class Employee {

 private string name;

 private decimal salary;

 private static readonly string companyName;

Π’ этом ΠΊΠΎΠ΄Π΅ объявлСно Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅, Π½ΠΎ, помСчая Π΅Π³ΠΎ ΠΊΠ°ΠΊ static, ΠΌΡ‹ инструктируСм компилятор, Ρ‡Ρ‚ΠΎ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько создано ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Employee. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ смыслС это статичСскоС ΠΏΠΎΠ»Π΅ ассоциируСтся с классом ΠΊΠ°ΠΊ Ρ†Π΅Π»Ρ‹ΠΌ, Π° Π½Π΅ с ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ объявили это ΠΏΠΎΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π’Π°ΠΊΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысл, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ имя сотрудника, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ послС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΎΠ΄Π½ΠΎΠ³ΠΎ объявлСния этого поля Π½Π΅ достаточно. НСобходимо Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ инициализируСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π“Π΄Π΅ это Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Ясно, Ρ‡Ρ‚ΠΎ Π½Π΅ Π² конструкторС β€” конструктор вызываСтся всякий Ρ€Π°Π· ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Employee, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ companyName Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹. C# прСдоставляСт для этой Ρ†Π΅Π»ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ статичСский конструктор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструктор, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для класса Π² Ρ†Π΅Π»ΠΎΠΌ, Π° Π½Π΅ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Если для класса ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ статичСский конструктор, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. НС гарантируСтся Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ сработаСт, Π½ΠΎ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ любой клиСнтский ΠΊΠΎΠ΄ попытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ классу. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ происходит ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”ΠΎΠ±Π°Π²ΠΈΠΌ статичСский конструктор для класса Employee:

static Employee {

 companyName = "Wrox Press Pop Stars";

}

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, конструктор идСнтифицируСтся ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. Π­Ρ‚ΠΎΡ‚ конструктор обозначаСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ static, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ являСтся статичСским конструктором. Он Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Π½ΠΈ ΠΊΠ°ΠΊ public, Π½ΠΈ ΠΊΠ°ΠΊ private, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ C#, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ срСдой выполнСния .NET. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для статичСского конструктора Π½Π΅ трСбуСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ статичСский конструктор Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π•Ρ‰Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Π΅Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ запись Π² рССстрС ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»Π΅ companyName объявлСно ΠΊΠ°ΠΊ статичСскоС ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Ρ‚ΠΎ статичСский конструктор являСтся СдинствСнным мСстом, Π³Π΄Π΅ полю ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ½Π½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ послСднюю Π²Π΅Ρ‰ΡŒ β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ названию ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.