000136. Как делать функции c#- Часть 4
Как делать функции c#? Часть 4||wmysterio|wmysterio|[email protected]|||Всем хай! Четвёртая часть по функциям я хотел-бы посвятить такому интересному явлению, как свойства. Собственно свойства это не совсем функции, так как играют другую роль, но всё-же они чем-то напоминают функции и решил добавить этот урок к этому блоку.
Для того, что-бы написать свойство класса, достаточно написать следующий код:
СПЕЦИФИКАТОР_ДОСТУПА ТИП_СВОЙСТВА НАЗВАНИЕ_СВОЙСТВА {
get {
return ВОЗВРАЩАЕМЫЙ_ПАРАМЕТР;
}
set {
ПРИНИМАЕМЫЙ_ПАРАМЕТР = value;
}
}
|
Со спецификатором доступа думаю всё понятно. Если не понятно, то читайте уроки блока по ООП.
ТИП_СВОЙСТВА - тип значения, которое принимает или возвращает свойство.
НАЗВАНИЕ_СВОЙСТВА - имя свойства(как и имя функции) но так как это, не функция, то скобок ставить не нужно.
ВОЗВРАЩАЕМЫЙ_ПАРАМЕТР - параметр, который возвращает ту сущность, которая есть в классе.
ПРИНИМАЕМЫЙ_ПАРАМЕТР - задаёт полю класса "некоторое значение". Это "некоторое значение" является оператор value.
Что касается get и set, этих братьев-акробатов. get - значит получить значение поля класса, set - наоборот, задаёт значение полю. Эти операторы являются блочными конструкциями и наличие фигурных скобок обязательное. Также в блоке get обязательно должен быть return а в set - value.
Давайте возьмём класс Car из предыдущего урока, и добавим ему свойство:
public class Car {
private string _auto = "Автомобиль";
public int Speed = 200;
public Car() { }
public int CurrentSpeed {
get {
return Speed;
}
set {
Speed = value;
}
}
}
|
Я убрал процедуру SetSpeed, теперь скорость в нас будет свойством. Давайте проверим в нашей программе работоспособность свойств:
class Program {
static void Main() {
Car MyCar = new Car();
Console.WriteLine( "Изначальная скорость: {0}", MyCar.CurrentSpeed );
MyCar.CurrentSpeed = 150;
Console.WriteLine( "Новая скорость: {0}", MyCar.CurrentSpeed );
Console.ReadKey();
}
}
|
Результат:
Как видим, свойство отработало у нас, как нужно.
Если не нужно выполнять каких-то действий при получении значения или чтобы задать его, то принято писать следующую конструкцию:

public int CurrentSpeed { get; set; }
|
Компилятор поймёт это как абсолютно новое свойство, по этому поле Speed нам не нужно, а наш класс будет иметь следующий вид:
public class Car {
private string _auto = "Автомобиль";
public Car() { }
public int CurrentSpeed { get; set; }
}
|
Проверим программу:
Как видим, изначальное значение по-умолчанию присвоило 0. С этого можно сделать вывод, что по-умолчанию компилятор подставляет пустые значения для свойства с get. Для чисел пустым считается число 0, для строк - "" и.т.п.
Каким-же образом задавать изначальные значения? Это делается в конструкторе класса. В нашем случаи это такой код:

public class Car {
private string _auto = "Автомобиль";
public Car() {
CurrentSpeed = 200;
}
public int CurrentSpeed { get; set; }
}
|
Результат:
Давайте переделаем поле _auto под свойство Name для всех классов, которые были в предыдущем уроке. Мы получим:

public class Car {
public Car() {
Name = "Автомобиль";
}
public string Name { get; set; }
public int CurrentSpeed { get; set; }
}
public class Lanborghini : Car {
public int DoorCount = 4;
public string EngineType = "Automatic";
public Lanborghini() {
Name = "Ламборгини";
}
}
public class Porshe : Car {
public int DoorCount = 2;
public string EngineType = "Automatic";
public int WheelsSize = 5;
public Porshe() {
Name = "Порше";
}
}
public class Gallardo : Lanborghini {
public int EnginePower = 1500;
public int TireSize = 4;
public Gallardo() {
Name = "Галлардо";
}
}
|
Проверим работоспособность следующим кодом:
class Program {
static void Main() {
Car MyCar = new Car();
Lanborghini MyLambo = new Lanborghini();
Porshe MyPorshe = new Porshe();
Gallardo MyGallardo = new Gallardo();
Console.WriteLine( "{0}", MyCar.Name );
Console.WriteLine( "{0}", MyLambo.Name );
Console.WriteLine( "{0}", MyPorshe.Name );
Console.WriteLine( "{0}", MyGallardo.Name );
Console.ReadKey();
}
}
|
По-идеи в нас должно вывести имя транспорта каждого класса. Результат:
Так как свойство NAME объявлено в "главном классе", то его взяли и производные. В этом нам помогло наследование :)
Вот код всей программы:Кодusing System;
namespace Consol {
class Program {
static void Main() {
Car MyCar = new Car();
Lanborghini MyLambo = new Lanborghini();
Porshe MyPorshe = new Porshe();
Gallardo MyGallardo = new Gallardo();
Console.WriteLine( "{0}", MyCar.Name );
Console.WriteLine( "{0}", MyLambo.Name );
Console.WriteLine( "{0}", MyPorshe.Name );
Console.WriteLine( "{0}", MyGallardo.Name );
Console.ReadKey();
}
}
public class Car {
public Car() {
Name = "Автомобиль";
}
public string Name { get; set; }
public int CurrentSpeed { get; set; }
}
public class Lanborghini : Car {
public int DoorCount = 4;
public string EngineType = "Automatic";
public Lanborghini() {
Name = "Ламборгини";
}
}
public class Porshe : Car {
public int DoorCount = 2;
public string EngineType = "Automatic";
public int WheelsSize = 5;
public Porshe() {
Name = "Порше";
}
}
public class Gallardo : Lanborghini {
public int EnginePower = 1500;
public int TireSize = 4;
public Gallardo() {
Name = "Галлардо";
}
}
}Это всё равно не вся информация о свойствах, но её достаточно, что понять главный принцип. На этом всё, ждите новых уроков
|758|1|0|15699692


png
21897\|07324917
png209
77|99317773png
21897\|65541976
png203
85||kak_delat_funkcii_c_chast_4|1392798643Last modified 1yr ago