Читаем Язык программирования C#9 и платформа .NET5 полностью

В версии 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:


// Вызов специального конструктора.

Point pt = new Point(10, 16) { X = 100, Y = 100 };


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

Добавьте к проекту новый файл класса по имени PointColorEnum.cs и создайте следующее перечисление цветов:


namespace ObjectInitializers

{

  enum PointColorEnum

  {

    LightBlue,

    BloodRed,

    Gold

  }

}


Обновите код класса Point, как показано ниже:


class Point

{

   public int X { get; set; }

   public int Y { get; set; }

   public PointColorEnum Color{ get; set; }


   public Point(int xVal, int yVal)

   {

     X = xVal;

     Y = yVal;

     Color = PointColorEnum.Gold;

   }


   public Point(PointColorEnum ptColor)

   {

     Color = ptColor;

   }


Перейти на страницу:

Похожие книги

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT