Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 146
- Предыдущая
- 146/642
- Следующая
((SalesPerson)emp).SalesNumber); Console.WriteLine(); } else if (emp is Manager) { Console.WriteLine("{0} had {1} stock options...", emp.Name, ((Manager)emp).StockOptions); Console.WriteLine(); }}Здесь во время выполнения производится проверка с целью выяснения, на что именно в памяти указывает входная ссылка типа базового класса. После определения, принят ли объект типа
SalesPersonManagertry/catchifНачиная с версии C# 7.0, с помощью ключевого слова
isstatic 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). Такое обновленное сопоставление с образцом можно использовать с ключевым словом
isManagerSalesPersonif (emp is not Manager and not SalesPerson){ Console.WriteLine("Unable to promote {0}. Wrong employee type", emp.Name); Console.WriteLine();}Использование отбрасывания вместе с ключевым словом is (нововведение в версии 7.0)
Ключевое слово
isifswitchif (obj is var _){ // Делать что-то}Такое условие будет давать совпадение с чем угодно, а потому следует уделять внимание порядку, в котором используется блок сравнения с отбрасыванием. Ниже показан обновленный метод
GivePromotion()if (emp is SalesPerson s){ Console.WriteLine("{0} made {1} sale(s)!", s.Name, s.SalesNumber); Console.WriteLine();}// Если Manager, тогда присвоить переменной melse 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); Console.WriteLine();}Финальный оператор
ifEmployeeManagerSalesPersonPtSalesPersonPtSalesPersonSalesPersonЕще раз о сопоставлении с образцом (нововведение в версии 7.0)
В главе 3 было представлено средство сопоставления с образцом C# 7.0 наряду с его обновлениями в версии C# 9.0. Теперь, когда вы обрели прочное понимание приведения, наступило время для более удачного примера. Предыдущий пример можно модернизировать для применения оператора
switchstatic void GivePromotion(Employee emp){ Console.WriteLine("{0} was promoted!", emp.Name); switch (emp)- Предыдущая
- 146/642
- Следующая
