Parcours
/
C#
C#
/
Exercices
/
Sécurise Munchester United
Sécurise Munchester United

Sécurise Munchester United

Exercice d'apprentissage

Introduction

Le cast

Le cast et la conversion de type sont deux manières différentes de faire passer une expression d'un type de données à un autre.

On peut appliquer un cast à une expression pour la faire passer à un autre type avec l'opérateur de cast (<type>).

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

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

Si les types ne sont pas compatibles, une instance de InvalidCastException est levée. Dans le cas des nombres, cela indique que le type de destination ne peut pas représenter la valeur convertie. Dans le cas des classes, l'un des types doit dériver de l'autre (cela vaut aussi, trivialement, pour les structures).

Une alternative au cast est la conversion de type, à l'aide de l'opérateur is. On l'applique généralement aux types de référence et aux types nullables.

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

Si tu as besoin de détecter le type précis d'un objet, is peut être un peu trop permissif, car il renvoie vrai pour une classe ainsi que pour toutes les classes et interfaces dont elle dérive, directement ou indirectement. typeof et Object.GetType() sont la solution dans ce cas.

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

Instructions

Notre club de football football-match-reports est en pleine ascension dans les ligues, et on t'a invité à faire quelques travaux supplémentaires, cette fois sur le système d'impression des badges de sécurité.

La hiérarchie des classes de l'encadrement est la suivante :

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

Une implémentation complète de la hiérarchie est fournie dans le code source de l'exercice.

Toutes les données transmises au générateur de badges de sécurité ont été validées et sont garanties non nulles.

1. Obtiens le nom affiché d'un membre de l'équipe de soutien tant que celui-ci fait partie du personnel

Implémente la méthode SecurityPassMaker.GetDisplayName(). Elle doit renvoyer la valeur du champ Title des instances de toutes les classes dérivées de Staff et, sinon, "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. Personnalise le nom affiché pour l'équipe de sécurité

Modifie la méthode SecurityPassMaker.GetDisplayName(). Elle doit se comporter comme dans la tâche 1, sauf que si le membre du personnel fait partie de l'équipe de sécurité (qu'il soit de type Security ou de l'une de ses classes dérivées), alors le texte " Priority Personnel" doit être affiché après le titre.

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. Ne désigne comme personnel prioritaire que les principaux membres de l'équipe de sécurité

Modifie la méthode SecurityPassMaker.GetDisplayName(). Elle doit se comporter comme dans la tâche 2, sauf que le texte " Priority Personnel" ne doit pas être affiché pour les instances de type SecurityJunior, SecurityIntern et PoliceLiaison.

var spm2 = new SecurityPassMaker();
spm2.GetDisplayName(new Security());
// => "Security Team Member Priority Personnel"
spm2.GetDisplayName(new SecurityJunior());
// => "Security Junior"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C# Exercism

Prêt à commencer Sécurise Munchester United ?

Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.