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

На заметку! Теперь, когда вы лучше понимаете роль конструкторов класса, полезно узнать об одном удобном сокращении. В Visual Studio и Visual Studio Code предлагается фрагмент кода ctor. Если вы наберете ctor и нажмете клавишу <ТаЬ>, тогда IDE-среда автоматически определит специальный стандартный конструктор. Затем можно добавить нужные параметры и логику реализации. Испытайте такой прием. 

<p id="AutBody_Root214">Роль ключевого слова this</p>

В языке C# имеется ключевое слово this, которое обеспечивает доступ к текущему экземпляру класса. Один из возможных сценариев использования this предусматривает устранение неоднозначности с областью видимости, которая может возникнуть, когда входной параметр имеет такое же имя, как и поле данных класса. Разумеется, вы могли бы просто придерживаться соглашения об именовании, которое не приводит к такой неоднозначности; тем не менее, чтобы проиллюстрировать такой сценарий, добавьте в класс Motorcycle новое поле типа string (под названием name), предназначенное для представления имени водителя. Затем добавьте метод SetDriverName со следующей реализацией:

class Motorcycle

{

  public int driverIntensity;

  // Новые члены для представления имени водителя.

  public string name;

  public void SetDriverName(string name) => name = name;

...

}

Хотя приведенный код нормально скомпилируется, компилятор C# выдаст сообщение с предупреждением о том, что переменная присваивается сама себе! В целях иллюстрации добавьте в свой код вызов метода SetDriverName и обеспечьте вывод значения поля name. Вы можете быть удивлены, обнаружив, что значением поля name является пустая строка!

// Создать объект Motorcycle с мотоциклистом по имени Tiny?

Motorcycle c = new Motorcycle(5);

c.SetDriverName("Tiny");

c.PopAWheely;

Console.WriteLine("Rider name is {0}", c.name);  // Выводит пустое значение name!

Проблема в том, что реализация метода SetDriverName присваивает входному параметру значение его самого, т.к. компилятор предполагает, что name ссылается на переменную, находящуюся в области видимости метода, а не на поле name из области видимости класса. Для информирования компилятора о том, что необходимо установить поле данных name текущего объекта в значение входного параметра name, просто используйте ключевое слово this, устранив такую неоднозначность:

public void SetDriverName(string name) => this.name = name;

Если неоднозначность отсутствует, тогда применять ключевое слово this для доступа класса к собственным полям данных или членам вовсе не обязательно. Например, если вы переименуете член данных типа string с name на driverName (что также повлечет за собой модификацию операторов верхнего уровня), то потребность в использовании this отпадет, поскольку неоднозначности с областью видимости больше нет:

class Motorcycle

{

  public int driverIntensity;

  public string driverName;

  public void SetDriverName(string name)

  {

    // These two statements are functionally the same.

    driverName = name;

    this.driverName = name;

  }

...

}

Несмотря на то что применение ключевого слова this в неоднозначных ситуациях дает не особенно большой выигрыш, вы можете счесть его удобным при реализации членов класса, т.к. IDE-среды, подобные Visual Studio и Visual Studio Code, будут активизировать средство IntelliSense, когда присутствует this. Это может оказаться полезным, если вы забыли имя члена класса и хотите быстро вспомнить его определение.

На заметку! Общепринятое соглашение об именовании предусматривает снабжение имен закрытых (или внутренних) переменных уровня класса префиксом в виде символа подчеркивания (скажем, _driverName), чтобы средство IntelliSense отображало все ваши переменные в верхней части списка. В нашем простом примере все поля являются открытыми, поэтому такое соглашение об именовании не применяется. В остальном материале книги закрытые и внутренние переменные будут именоваться с ведущим символом подчеркивания.

<p id="AutBody_Root215">Построение цепочки вызовов конструкторов с использованием this</p>
Перейти на страницу:

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

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

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

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

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

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

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

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