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

// Создать объект Car по имени Mary со скоростью 0 миль в час.

Car mary = new Car("Mary");

mary.PrintState;

// Создать объект Car по имени Daisy со скоростью 75 миль в час.

Car daisy = new Car("Daisy", 75);

daisy.PrintState;

...

<p id="AutBody_Root211">Конструкторы в виде членов, сжатых до выражений (нововведение в версии 7.0)</p>

В C# 7 появились дополнительные случаи употребления для стиля членов, сжатых до выражений. Теперь такой синтаксис применим к конструкторам, финализаторам, а также к средствам доступа get/set для свойств и индексаторов. С учетом сказанного предыдущий конструктор можно переписать следующим образом:

// Здесь currSpeed получит стандартное

// значение для типа int (0).

public Car(string pn) => petName = pn;

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

<p id="AutBody_Root212">Конструкторы с параметрами out (нововведение в версии 7.3)</p>

 Начиная с версии C# 7.3, в конструкторах (а также в рассматриваемых позже инициализаторах полей и свойств) могут использоваться параметры out. В качестве простого примера добавьте в класс Car следующий конструктор:

public Car(string pn, int cs, out bool inDanger)

{

  petName = pn;

  currSpeed = cs;

  if (cs > 100)

  {

    inDanger = true;

  }

  else

  {

    inDanger = false;

  }

}

Как обычно, должны соблюдаться все правила, касающиеся параметров out. В приведенном примере параметру inDanger потребуется присвоить значение до завершения конструктора.

<p id="AutBody_Root213">Еще раз о стандартном конструкторе</p>

Как вы только что узнали, все классы снабжаются стандартным конструктором. Добавьте в свой проект новый файл по имени Motorcycle.cs с показанным ниже определением класса Motorcycle:

using System;

namespace SimpleClassExample

{

  class Motorcycle

  {

    public void PopAWheely

    {

      Console.WriteLine("Yeeeeeee Haaaaaeewww!");

    }

  }

}

Теперь появилась возможность создания экземпляров Motorcycle с помощью стандартного конструктора:

Console.WriteLine("***** Fun with Class Types *****\n");

Motorcycle mc = new Motorcycle;

mc.PopAWheely;

...

Тем не менее, как только определен специальный конструктор с любым числом параметров, стандартный конструктор молча удаляется из класса и перестает быть доступным. Воспринимайте это так: если вы не определили специальный конструктор, тогда компилятор C# снабжает класс стандартным конструктором, давая возможность пользователю размещать в памяти экземпляр вашего класса с набором полей данных, которые установлены в корректные стандартные значения. Однако когда вы определяете уникальный конструктор, то компилятор предполагает, что вы решили взять власть в свои руки.

Следовательно, если вы хотите позволить пользователю создавать экземпляр вашего типа с помощью стандартного конструктора, а также специального конструктора, то должны явно переопределить стандартный конструктор. Важно понимать, что в подавляющем большинстве случаев реализация стандартного конструктора класса намеренно оставляется пустой, т.к. требуется только создание объекта со стандартными значениями. Обновите класс Motorcycle:

class Motorcycle

{

  public int driverIntensity;

  public void PopAWheely

  {

    for (int i = 0; i <= driverIntensity; i++)

    {

      Console.WriteLine("Yeeeeeee Haaaaaeewww!");

    }

  }

  // Вернуть стандартный конструктор, который будет.

  // устанавливать все члены данных в стандартные значения

  public Motorcycle {}

  // Специальный конструктор.

  public Motorcycle(int intensity)

  {

    driverIntensity = intensity;

  }

}

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

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

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

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

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

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

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

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

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