Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:
empty-line/>

public Point(int xVal, int yVal)

{

X = xVal;

Y = yVal;

}

public Point { }

public void DisplayStats

{

Console.WriteLine("[{0}, {1}]", X, Y);

}

}

А теперь посмотрим,

как создавать объекты
Point
, с применением любого из следующих подходов:

Console.WriteLine("***** Fun with Object Init Syntax *****\n");

// Создать объект Point, устанавливая каждое свойство вручную.

Point firstPoint = new Point;

firstPoint.X = 10;

firstPoint.Y = 10;

firstPoint.DisplayStats;

// Или создать объект Point посредством специального конструктора.

Point anotherPoint = new Point(20, 20);

anotherPoint.DisplayStats;

// Или создать объект Point, используя синтаксис инициализации объектов.

Point finalPoint = new Point { X = 30, Y = 30 };

finalPoint.DisplayStats;

Console.ReadLine;

При создании последней переменной

Point
специальный конструктор не используется (как делается традиционно), а взамен устанавливаются значения открытых свойств
X
и
Y
. "За кулисами" вызывается стандартный конструктор типа, за которым следует установка значений указанных свойств. В таком отношении синтаксис инициализации объектов представляет собой просто сокращение синтаксиса для создания переменной класса с применением стандартного конструктора и установки данных состояния свойство за свойством.

На заметку! Важно помнить о том, что процесс инициализации объектов неявно использует методы установки свойств. Если метод установки какого-то свойства помечен как

private
, тогда этот синтаксис применить не удастся.

Использование средства доступа только для инициализации (нововведение в версии 9.0)

В версии C# 9.0 появилось новое средство доступа только для инициализации. Оно позволяет устанавливать свойство во время инициализации, но после завершения конструирования объекта свойство становится доступным только для чтения. Свойства такого типа называются неизменяемыми. Добавьте к проекту новый файл класса по имени

ReadOnlyPointAfterCreation.cs
и поместите в него следующий код:

using System;

namespace ObjectInitializers

{

class PointReadOnlyAfterCreation

{

public int X { get; init; }

public int Y { get; init; }

public void DisplayStats

{

Console.WriteLine("InitOnlySetter: [{0}, {1}]", X, Y);

}

public PointReadOnlyAfterCreation(int xVal, int yVal)

{

X = xVal;

Y = yVal;

}

public PointReadOnlyAfterCreation { }

}

}

Новый

класс тестируется с применением приведенного ниже кода:

// Создать объект точки, допускающий только чтение

// после конструирования

PointReadOnlyAfterCreation firstReadonlyPoint =

new PointReadOnlyAfterCreation(20, 20);

firstReadonlyPoint.DisplayStats;

// Или создать объект точки с использованием синтаксиса только

// для инициализации.

PointReadOnlyAfterCreation secondReadonlyPoint =

new PointReadOnlyAfterCreation { X = 30, Y
= 30 };

secondReadonlyPoint.DisplayStats;

Обратите внимание, что в коде для класса

Point
ничего не изменилось кроме, разумеется, имени класса. Отличие в том, что после создания экземпляра класса модифицировать значения свойств
X
и
Y
нельзя. Например, показанный далее код не скомпилируется:

// Следующие две строки не скомпилируются

secondReadonlyPoint.X = 10;

secondReadonlyPoint.Y = 10;

Вызов специальных конструкторов с помощью синтаксиса инициализации

В предшествующих примерах объекты типа

Point
инициализировались путем неявного вызова стандартного конструктора этого типа:

// Здесь стандартный конструктор вызывается неявно.

Point finalPoint = new Point { X = 30, Y = 30 };

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

// Здесь стандартный конструктор вызывается явно.

Point finalPoint = new Point { X = 30, Y = 30 };

Имейте в виду, что при конструировании объекта типа с использованием синтаксиса инициализации можно вызывать любой конструктор, определенный в классе. В настоящий момент в типе

Point
определен конструктор с двумя аргументами для установки позиции (х, у). Таким образом, следующее объявление переменной
Point
приведет к установке
X
в
100
и
Y
в
100
независимо от того факта, что в аргументах конструктора указаны значения
10
и
16
:

Поделиться:
Популярные книги

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

О, мой бомж

Джема
1. Несвятая троица
Любовные романы:
современные любовные романы
5.00
рейтинг книги
О, мой бомж

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Вы не прошли собеседование

Олешкевич Надежда
1. Укротить миллионера
Любовные романы:
короткие любовные романы
5.00
рейтинг книги
Вы не прошли собеседование

Метаморфозы Катрин

Ром Полина
Фантастика:
фэнтези
8.26
рейтинг книги
Метаморфозы Катрин

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Истинная поневоле, или Сирота в Академии Драконов

Найт Алекс
3. Академия Драконов, или Девушки с секретом
Любовные романы:
любовно-фантастические романы
6.37
рейтинг книги
Истинная поневоле, или Сирота в Академии Драконов

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Возвышение Меркурия. Книга 17

Кронос Александр
17. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 17

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки