Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

      ((SalesPerson)emp).SalesNumber);

    Console.WriteLine();

  }

  else if (emp is Manager)

  {

    Console.WriteLine("{0} had {1} stock options...", emp.Name,

      ((Manager)emp).StockOptions);

    Console.WriteLine();

  }

}

Здесь во время выполнения производится проверка с целью выяснения, на что именно в памяти указывает входная ссылка типа базового класса. После определения, принят ли объект типа SalesPerson или Manager, можно применить явное приведение, чтобы получить доступ к специализированным членам данного типа. Также обратите внимание, что помещать операции приведения внутрь конструкции try/catch не обязательно, т.к. внутри раздела if, выполнившего проверку условия, уже известно, что приведение безопасно.

Начиная с версии C# 7.0, с помощью ключевого слова is переменной можно также присваивать объект преобразованного типа, если приведение работает. Это позволяет сделать предыдущий метод более ясным, устраняя проблему "двойного приведения". В предшествующем примере первое приведение выполняется, когда производится проверка совпадения типов, и если она проходит успешно, то переменную придется приводить снова. Взгляните на следующее обновление предыдущего метода:

static void GivePromotion(Employee emp)

{

  Console.WriteLine("{0} was promoted!", emp.Name);

  // Если SalesPerson, тогда присвоить переменной s

  if (emp is SalesPerson s)

  {

    Console.WriteLine("{0} made {1} sale(s)!", s.Name,

      s.SalesNumber);

    Console.WriteLine();

  }

  // Если Manager, тогда присвоить переменной m

  else if (emp is Manager m)

  {

    Console.WriteLine("{0} had {1} stock options...",

      m.Name, m.StockOptions);

    Console.WriteLine();

  }

}

В версии C# 9.0 появились дополнительные возможности сопоставления с образцом (они были раскрыты в главе 3). Такое обновленное сопоставление с образцом можно использовать с ключевым словом is. Например, для проверки, что объект сотрудника не относится ни к классу Manager, ни к классу SalesPerson, применяйте следующий код:

if (emp is not Manager and not SalesPerson)

{

  Console.WriteLine("Unable to promote {0}. Wrong employee type", emp.Name);

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  Console.WriteLine();

}

Использование отбрасывания вместе с ключевым словом is (нововведение в версии 7.0)

Ключевое слово is также разрешено применять в сочетании с заполнителем для отбрасывания переменных. Вот как можно обеспечить перехват объектов всех типов в операторе if или switch:

if (obj is var _)

{

  // Делать что-то

}

Такое условие будет давать совпадение с чем угодно, а потому следует уделять внимание порядку, в котором используется блок сравнения с отбрасыванием. Ниже показан обновленный метод GivePromotion():

if (emp is SalesPerson s)

{

  Console.WriteLine("{0} made {1} sale(s)!", s.Name, s.SalesNumber);

  Console.WriteLine();

}

// Если Manager, тогда присвоить переменной m

else if (emp is Manager m)

{

  Console.WriteLine("{0} had {1} stock options...", m.Name, m.StockOptions);

  Console.WriteLine();

}

else if (emp is var _)

{

  // Некорректный тип сотрудника

  Console.WriteLine("Unable to promote {0}. Wrong employee type", emp.Name);

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  Console.WriteLine();

}

Финальный оператор if будет перехватывать любой экземпляр Employee, не являющийся Manager, SalesPerson или PtSalesPerson. Не забывайте, что вы можете приводить вниз к базовому классу, поэтому PtSalesPerson будет регистрироваться как SalesPerson.

Еще раз о сопоставлении с образцом (нововведение в версии 7.0)

В главе 3 было представлено средство сопоставления с образцом C# 7.0 наряду с его обновлениями в версии C# 9.0. Теперь, когда вы обрели прочное понимание приведения, наступило время для более удачного примера. Предыдущий пример можно модернизировать для применения оператора switch, сопоставляющего с образцом:

static void GivePromotion(Employee emp)

{

  Console.WriteLine("{0} was promoted!", emp.Name);

  switch (emp)

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*