Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ Программирование на С# _Хотов.docx
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
2.22 Mб
Скачать
      1. Встроенные Методы (Expression–Bodied)

Начиная с версии C# 6.0 (Visual Studio 2015) появилась новая функциональность под названием встроенные методы илиExpression–Bodied Methods. Эта функциональность позволяет применять лямбда-выражения для сокращенного написания методов в одну строку. Например, возьмем пару классов с методами:

class Person

{

public string Name { get; set; }

public void Display()

{

Console.WriteLine(this.Name);

}

}

class Circle

{

public static double GetArea(double radius)

{

return radius * radius * 3.14;

}

}

Действие каждого метода определяется в виде одного выражения или одной строки.Теперь применим Expression–Bodied методы:

class Person

{

public string Name { get; set; }

public void Display() => Console.WriteLine(Name);

}

class Circle

{

public static double GetArea(double radius) => radius * radius * 3.14;

}

Метод Display() просто выводит значение свойства Name, а метод GetArea() вычисляет площадь круга, используя переданный в метод радиус.Данные методы могут использоваться также, как и любые другие:

class Program

{

static void Main(string[] args)

{

Person person = new Person { Name = "Tom" };

person.Display();

double area = Circle.GetArea(50);

Console.WriteLine("Площадь круга с радиусом в 50 равна {0}", area);

Console.Read();

}

}

Также можно применять лямбды для упрощения написания свойств, которые содержат только блок get и которые возвращают определенное значение:

class Person

{

// эквивалентно public string Name { get { return name; } }

public string Name => name;

private readonly string name;

public Person(string _name)

{

name = _name;

}

public void Display() => Console.WriteLine(Name);

}

class Program

{

static void Main(string[] args)

{

Person person = new Person("Tom");

person.Display();

Console.Read();

}

}

    1. Сериализация

      1. Введение в сериализацию объектов

Ранее мы посмотрели, как сохранять информацию в текстовые файлы, а также затронули сохранение несложных структур в бинарные данные. Но нередко подобных механизмов оказывается недостаточно особенно для сохранения сложных объектов. С этой проблемой призван справится механизм сериализации. Сериализация представляет процесс преобразования какого-либо объекта в поток байтов. После преобразования мы можем этот поток байтов или записать на диск или сохранить его временно в памяти. А при необходимости можно выполнить обратный процесс - десериализацию, то есть получить из потока байтов ранее сохраненный объект.

        1. Атрибут Serializable

Чтобы объект определенного класса можно было сериализовать, надо этот класс пометить атрибутом Serializable:

[Serializable]

class Person

{

public string Name { get; set; }

public int Year { get; set; }

public Person(string name, int year)

{

Name = name;

Year = year;

}

}

При отстутствии данного атрибута объект Person не сможет быть сериализован, и при попытке сериализации будет выброшено исключение SerializationException.

Если мы не хотим, чтобы какой-то член класса сериализовался, то мы его помечаем атрибутом NonSerialized:

[Serializable]

class Person

{

public string Name { get; set; }

public int Year { get; set; }

[NonSerialized]

public string AccNumber { get; set; }

public Person(string name, int year)

{

Name = name;

Year = year;

}

}

При наследовании подобного класса, следует учитывать, что атрибут Serializable автоматически не наследуется. И если мы хотим, чтобы производный класс также мог бы быть сериализован, то опять же мы применяем к нему атрибут:

[Serializable]

class Worker : Person