# 000136. Как делать функции c#- Часть 4

Как делать функции c#? Часть 4||wmysterio|wmysterio|<wmysterio@yandex.ru>|||Всем хай! Четвёртая часть по функциям я хотел-бы посвятить такому интересному явлению, как свойства. Собственно свойства это не совсем функции, так как играют другую роль, но всё-же они чем-то напоминают функции и решил добавить этот урок к этому блоку.\
\
Для того, что-бы написать свойство класса, достаточно написать следующий код:

| <p>СПЕЦИФИКАТОР\_ДОСТУПА ТИП\_СВОЙСТВА <strong>НАЗВАНИЕ\_СВОЙСТВА</strong> {<br>    get {<br>        return ВОЗВРАЩАЕМЫЙ\_ПАРАМЕТР;<br>    }<br><br>    set {<br>        ПРИНИМАЕМЫЙ\_ПАРАМЕТР = value;<br>    }<br>}<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Со спецификатором  доступа думаю всё понятно. Если не понятно, то читайте уроки блока по ООП.\
ТИП\_СВОЙСТВА - тип значения, которое принимает или возвращает свойство.\
НАЗВАНИЕ\_СВОЙСТВА - имя свойства(как и имя функции) но так как это, не функция, то скобок ставить не нужно.\
ВОЗВРАЩАЕМЫЙ\_ПАРАМЕТР - параметр, который возвращает ту сущность, которая есть в классе.\
ПРИНИМАЕМЫЙ\_ПАРАМЕТР - задаёт полю класса "некоторое значение". Это "некоторое значение" является оператор value.\
\
Что касается get и set, этих братьев-акробатов. get - значит получить значение поля класса, set - наоборот, задаёт значение полю. Эти операторы являются блочными конструкциями и наличие фигурных скобок обязательное. Также в блоке get обязательно должен быть return а в set - value.\
\
Давайте возьмём класс Car из предыдущего урока, и добавим ему свойство:

| <p>    public class Car {<br>        private string \_auto = "Автомобиль";<br>        public int Speed = 200;<br><br>        public Car() { }<br><br>        public int CurrentSpeed {<br>            get {<br>                return Speed;<br>            }<br><br>            set {<br>                Speed = value;<br>            }<br>        }<br>    }<br></p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Я убрал процедуру SetSpeed, теперь скорость в нас будет свойством. Давайте проверим в нашей программе работоспособность свойств:

| <p>    class Program {<br>        static void Main() {<br>            Car MyCar = new Car();<br>            Console.WriteLine( "Изначальная скорость: {0}", MyCar.CurrentSpeed );<br>            MyCar.CurrentSpeed = 150;<br>            Console.WriteLine( "Новая скорость: {0}", MyCar.CurrentSpeed );<br>            Console.ReadKey();<br>        }<br>    }<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Результат:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/15699692.png)\
Как видим, свойство отработало у нас, как нужно.\
\
Если не нужно выполнять каких-то действий при получении значения или чтобы задать его, то принято писать следующую конструкцию:

| <p>public int CurrentSpeed { get; set; }<br></p> |
| ------------------------------------------------ |

Компилятор поймёт это как абсолютно новое свойство, по этому поле Speed нам не нужно, а наш класс будет иметь следующий вид:

| <p>    public class Car {<br>        private string \_auto = "Автомобиль";<br><br>        public Car() { }<br><br>        public int CurrentSpeed { get; set; }<br>    }<br></p> |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Проверим программу:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/07324917.png)\
Как видим, изначальное значение по-умолчанию присвоило 0. С этого можно сделать вывод, что по-умолчанию компилятор подставляет пустые значения для свойства с get. Для чисел пустым считается число 0, для строк - "" и.т.п.\
\
Каким-же образом задавать изначальные значения? Это делается в конструкторе класса. В нашем случаи это такой код:

| <p>    public class Car {<br>        private string \_auto = "Автомобиль";<br><br>        public Car() {<br>            CurrentSpeed = 200;<br>        }<br><br>        public int CurrentSpeed { get; set; }<br>    }<br></p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

Результат:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/99317773.png)\
Давайте переделаем поле \_auto под свойство Name для всех классов, которые были в предыдущем уроке. Мы получим:<br>

| <p>    public class Car {<br>        public Car() {<br>            Name = "Автомобиль";<br>        }<br>        public string Name { get; set; }<br>        public int CurrentSpeed { get; set; }<br>    }<br><br>    public class Lanborghini : Car {<br>        public int DoorCount = 4;<br>        public string EngineType = "Automatic";<br>        public Lanborghini() {<br>            Name = "Ламборгини";<br>        }<br>    }<br><br>    public class Porshe : Car {<br>        public int DoorCount = 2;<br>        public string EngineType = "Automatic";<br>        public int WheelsSize = 5;<br>        public Porshe() {<br>            Name = "Порше";<br>        }<br>    }<br>    public class Gallardo : Lanborghini {<br>        public int EnginePower = 1500;<br>        public int TireSize = 4;<br>        public Gallardo() {<br>            Name = "Галлардо";<br>        }<br>    }<br></p> |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Проверим работоспособность следующим кодом:

| <p>    class Program {<br>        static void Main() {<br>            Car MyCar = new Car();<br>            Lanborghini MyLambo = new Lanborghini();<br>            Porshe MyPorshe = new Porshe();<br>            Gallardo MyGallardo = new Gallardo();<br><br>            Console.WriteLine( "{0}", MyCar.Name );<br>            Console.WriteLine( "{0}", MyLambo.Name );<br>            Console.WriteLine( "{0}", MyPorshe.Name );<br>            Console.WriteLine( "{0}", MyGallardo.Name );<br><br>            Console.ReadKey();<br>        }<br>    }<br></p> |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

По-идеи в нас должно вывести имя транспорта каждого класса. Результат:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/65541976.png)\
Так как свойство NAME объявлено в "главном классе", то его взяли и производные. В этом нам помогло наследование :)\
\
Вот код всей программы:Кодusing System;\
\
namespace Consol {\
&#x20;   class Program {\
&#x20;       static void Main() {\
&#x20;           Car MyCar = new Car();\
&#x20;           Lanborghini MyLambo = new Lanborghini();\
&#x20;           Porshe MyPorshe = new Porshe();\
&#x20;           Gallardo MyGallardo = new Gallardo();\
\
&#x20;           Console.WriteLine( "{0}", MyCar.Name );\
&#x20;           Console.WriteLine( "{0}", MyLambo.Name );\
&#x20;           Console.WriteLine( "{0}", MyPorshe.Name );\
&#x20;           Console.WriteLine( "{0}", MyGallardo.Name );\
\
&#x20;           Console.ReadKey();\
&#x20;       }\
&#x20;   }\
\
&#x20;   public class Car {\
&#x20;       public Car() {\
&#x20;           Name = "Автомобиль";\
&#x20;       }\
\
&#x20;       public string Name { get; set; }\
\
&#x20;       public int CurrentSpeed { get; set; }\
&#x20;   }\
\
&#x20;   public class Lanborghini : Car {\
&#x20;       public int DoorCount = 4;\
&#x20;       public string EngineType = "Automatic";\
\
&#x20;       public Lanborghini() {\
&#x20;           Name = "Ламборгини";\
&#x20;       }\
&#x20;   }\
\
&#x20;   public class Porshe : Car {\
&#x20;       public int DoorCount = 2;\
&#x20;       public string EngineType = "Automatic";\
&#x20;       public int WheelsSize = 5;\
\
&#x20;       public Porshe() {\
&#x20;           Name = "Порше";\
&#x20;       }\
&#x20;   }\
\
&#x20;   public class Gallardo : Lanborghini {\
&#x20;       public int EnginePower = 1500;\
&#x20;       public int TireSize = 4;\
\
&#x20;       public Gallardo() {\
&#x20;           Name = "Галлардо";\
&#x20;       }\
&#x20;   }\
}Это всё равно не вся информация о свойствах, но её достаточно, что понять главный принцип. На этом всё, ждите новых уроков ![smile](http://s49.ucoz.net/sm/15/smile.gif)|758|1|0|15699692`png`218`97\|07324917`png`209`77|99317773`png`218`97\|65541976`png`203`85||kak\_delat\_funkcii\_c\_chast\_4|1392798643
