Trilhas
/
C#
C#
/
Exercícios
/
Secure Munchester United
Secure Munchester United

Secure Munchester United

Exercício de aprendizagem

Introdução

Casting

Casting e conversão de tipos são formas diferentes de transformar uma expressão de um tipo de dado em outro.

Uma expressão pode receber um cast para outro tipo com o operador de cast (<type>).

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

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

Se os tipos não forem compatíveis, uma instância de InvalidCastException é lançada. No caso de números, isso indica que o tipo de destino não consegue representar o valor convertido. No caso de classes, um dos tipos precisa derivar do outro (o que também vale, trivialmente, para structs).

Uma alternativa ao casting é a conversão de tipos, usando o operador is. Normalmente ela é aplicada a tipos de referência e a tipos anuláveis.

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

Se você precisar detectar o tipo exato de um objeto, o is pode ser um pouco permissivo demais, porque ele retornará true para uma classe e para quaisquer classes e interfaces das quais ela derive direta ou indiretamente. Nesse caso, typeof e Object.GetType() são a solução.

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

Instruções

Nosso clube de futebol football-match-reports está voando alto nas ligas, e você foi convidado a fazer mais um trabalho, desta vez no sistema de impressão de crachás de segurança.

A hierarquia de classes da equipe de bastidores é a seguinte

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

Uma implementação completa da hierarquia é fornecida como parte do código-fonte do exercício.

Todos os dados passados ao gerador de crachás de segurança foram validados e é garantido que não são nulos.

1. Obter o nome de exibição de um membro da equipe de apoio, desde que seja um funcionário

Implemente o método SecurityPassMaker.GetDisplayName(). Ele deve retornar o valor do campo Title das instâncias de todas as classes derivadas de Staff e, caso contrário, "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. Personalizar o nome de exibição para a equipe de segurança

Modifique o método SecurityPassMaker.GetDisplayName(). Ele deve se comportar como na Tarefa 1, exceto que, se o funcionário for membro da equipe de segurança (seja do tipo Security ou de uma de suas derivadas), o texto " Priority Personnel" deve ser exibido depois do título.

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. Designar apenas membros principais da equipe de segurança como pessoal prioritário

Modifique o método SecurityPassMaker.GetDisplayName(). Ele deve se comportar como na Tarefa 2, exceto que o texto " Priority Personnel" não deve ser exibido para instâncias do tipo SecurityJunior, SecurityIntern e PoliceLiaison.

var spm2 = new SecurityPassMaker();
spm2.GetDisplayName(new Security());
// => "Security Team Member Priority Personnel"
spm2.GetDisplayName(new SecurityJunior());
// => "Security Junior"
Editar via GitHub O link abre em uma nova janela ou aba
C# Exercism

Tudo pronto para começar Secure Munchester United?

Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.