Инициализация автосвойств

Начиная с версии C# 6.0 была добавлена такая функциональность, как инициализация автосвойств:

class Person

{

public string Name { get; set; } = "Tom";

public int Age { get; set; } = 23;

}

               

class Program

{

static void Main(string[] args)

{

   Person person = new Person();

   Console.WriteLine(person.Name); // Tom

   Console.WriteLine(person.Age); // 23

       

                          Console.Read();

}

}

И если мы не укажем для объекта Person значения свойств Name и Age, то будут действовать значения по умолчанию.

Еще одно изменение коснулось определения автосвойств. Например, если в C# 5.0 мы захотели сделать автосвойство доступным для установки только из класса, то надо было указать private set:

class Person

{

public string Name { get; private set; }

public Person(string n)

           {

                          Name = n;

           }

}

Кроме как из класса Person это свойство невозможно установить. Начиная с версии C# 6.0 нам необязательно писать private set, мы можем оставить только выражение get:

class Person

{

public string Name { get;}

public Person(string n)

           {

                          Name = n;

           }

}

Для хранения значения этого свойства для него неявно будет создаваться поле с модицикатором readonly, поэтому следует учитывать, что подобные get-свойства можно установить либо из конструктора класса, как в примере выше, либо при инициализации свойства:

class Person

{

public string Name { get;} = "Tom"

}

 

Лекция 6. Перегрузка методов

Иногда возникает необходимость создать один и тот же метод, но с разным набором параметров. И в зависимости от имеющихся параметров применять определенную версию метода. Такая возможность еше называется перегрузкой методов (method overloading).

И в языке C# мы можем создавать в классе несколько методов с одним и тем же именем. Но при этом мы должны учитывать, что методы с одним и тем же именем должны иметь либо разное количество параметров, либо параметры разных типов.

Например, пусть у нас есть следующий класс Calculator:

class Calculator

{

           public void Add(int a, int b)

{

                          int result = a + b;

   Console.WriteLine($"Result is {result}");

           }

public void Add(int a, int b, int c)

{

                          int result = a + b + c;

   Console.WriteLine($"Result is {result}");

}

public int Add(int a, int b, int c, int d)

{

                          int result = a + b + c + d;

   Console.WriteLine($"Result is {result}");

   return result;

           }

           public void Add(double a, double b)

           {

                          double result = a + b;

   Console.WriteLine($"Result is {result}");

           }

}

Здесь представлены четыре разных версии метода Add, то есть определены четыре перегрузки данного метода.

Первые три версии метода отличаются по количеству параметров. Четвертая версия совпадает с первой по количеству параметров, но отличается по их типу. При этом достаточно, чтобы хотя бы один параметр отличался по типу. Поэтому это тоже допустимая перегрузка метода Add.

Стоит отметить, что разные версии метода могут иметь разные возвращаемые значения, как в данном случае третья версия возвращает объект типа int. Однако простое изменение возвращаемого типа у метода еще не является основанием для создания новой версии метода. Опять же новая версия должна отличаться от других по количеству параметров или по их типу.

После определения перегруженных версий мы можем использовать их в программе:

class Program

{

           static void Main(string[] args)

{

                          Calculator calc = new Calculator();

   calc.Add(1, 2); // 3

   calc.Add(1, 2, 3); // 6

   calc.Add(1, 2, 3, 4); // 10

   calc.Add(1.4, 2.5); // 3.9

       

                          Console.ReadKey();

}

}

Консольный вывод:

Result is 3Result is 6Result is 10Result is 3.9

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: