Треки
/
C#
C#
/
Вправи
/
Secure Munchester United
Secure Munchester United

Secure Munchester United

Навчальна вправа

Вступ

Приведення типів

Приведення та перетворення типів - це різні способи змінити тип виразу з одного на інший.

Вираз можна привести до іншого типу за допомогою оператора приведення (<type>).

long l = 1000L;
int i = (int)l;

object o = new Random();
Random r = (Random)o;

Якщо типи не сумісні, викидається виняток InvalidCastException. У випадку чисел це означає, що тип-одержувач не може представити приведене значення. У випадку класів один із типів має бути похідним від іншого (це так само, хоч і тривіально, стосується структур).

Альтернатива приведенню - перетворення типів за допомогою оператора is. Зазвичай це застосовують до посилальних типів і типів, що допускають значення null.

object o = new Random();
if (o is Random rand)
{
    int ii = rand.Next();
    // now, do something random
}

Якщо потрібно визначити точний тип обʼєкта, то is може виявитися трохи надто поблажливим, адже він поверне правду і для класу, і для будь-яких класів й інтерфейсів, від яких він прямо чи опосередковано походить. У цьому випадку варто скористатися typeof й Object.GetType().

object o = new List<int>();

o is ICollection<int> // true
o.GetType() == typeof(ICollection<int>) // false
o is List<int> // true
o.GetType() == typeof(List<int>) // true

Вказівки

Наш футбольний клуб football-match-reports стрімко піднімається в лігах, і нам запропонували ще трохи роботи: цього разу над системою друку перепусток для служби безпеки.

Ієрархія класів допоміжного персоналу така:

TeamSupport (interface)
├ Chairman
├ Manager
└ Staff (abstract)
    ├ Physio
    ├ OffensiveCoach
    ├ GoalKeepingCoach
    └ Security
        ├ SecurityJunior
        ├ SecurityIntern
        └ PoliceLiaison

Повну реалізацію цієї ієрархії наведено у вихідному коді вправи.

Усі дані, передані до генератора перепусток, перевірено, і гарантовано, що вони не є null.

1. Отримати відображуване імʼя для члена команди підтримки, якщо він належить до персоналу

Реалізуйте метод SecurityPassMaker.GetDisplayName(). Для примірників усіх класів, похідних від Staff, він має повертати значення поля Title, а для решти - «Too Important for a Security Pass».

var spm = new SecurityPassMaker();
spm.GetDisplayName(new Manager());
// => "Too Important for a Security Pass"
spm.GetDisplayName(new Physio());
// => "The Physio"

2. Налаштувати відображуване імʼя для команди безпеки

Змініть метод SecurityPassMaker.GetDisplayName(). Він має поводитися так само, як у завданні 1, але якщо працівник належить до команди безпеки (тобто має тип Security або один з похідних від нього), то після назви має бути додано текст « Priority Personnel».

var spm = new SecurityPassMaker();
spm.GetDisplayName(new Physio());
// => "The Physio"
var spm2 = new SecurityPassMaker();
spm2.GetDisplayName(new Security());
// => "Security Team Member Priority Personnel"
spm2.GetDisplayName(new SecurityJunior());
// => "Security Junior Priority Personnel"

3. Позначати як пріоритетний персонал лише основний склад команди безпеки

Змініть метод SecurityPassMaker.GetDisplayName(). Він має поводитися так само, як у завданні 2, але текст « Priority Personnel» не має додаватися для примірників типів SecurityJunior, SecurityIntern і PoliceLiaison.

var spm2 = new SecurityPassMaker();
spm2.GetDisplayName(new Security());
// => "Security Team Member Priority Personnel"
spm2.GetDisplayName(new SecurityJunior());
// => "Security Junior"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
C# Exercism

Час розпочати Secure Munchester United?

Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.