# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000136.-kak-delat-funkcii-c-chast-4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
