Kurzusok
/
C#
C#
/
Feladatok
/
Biztonságos Munchester United
Biztonságos Munchester United

Biztonságos Munchester United

Tanulófeladat

Bevezetés

Castolás

A castolás és a típuskonverzió két különböző módja annak, hogy egy kifejezést egyik adattípusból a másikba alakítsunk.

Egy kifejezést a (<type>) cast operátorral lehet egy másik típusra castolni.

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

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

Ha a típusok nem kompatibilisek, InvalidCastException kivétel keletkezik. Számok esetén ez azt jelenti, hogy a fogadó típus nem tudja ábrázolni a castolt értéket. Osztályok esetén az egyik típusnak a másikból kell származnia (ez a struktúrákra is triviálisan igaz).

A castolás alternatívája a is operátort használó típuskonverzió. Ezt jellemzően referenciatípusokra és nullázható típusokra alkalmazzák.

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

Ha egy objektum pontos típusát kell megállapítanod, akkor az is lehet, hogy egy kicsit túl megengedő, mert igazat ad vissza egy osztályra és minden olyan osztályra és interfészre is, amelyből az közvetlenül vagy közvetve származik. Ebben az esetben a megoldást a typeof és az Object.GetType() jelenti.

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

Utasítások

A futballklubunk football-match-reports szárnyal a bajnokságokban, és ismét felkértek egy kis munkára, ezúttal a biztonsági belépőkártyák nyomtatási rendszerén.

A háttérszemélyzet osztályhierarchiája a következő:

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

A hierarchia teljes implementációja a feladat forráskódjának részeként rendelkezésre áll.

A belépőkártya-készítőnek átadott összes adat ellenőrzött, és garantáltan nem null.

1. Kérd le a támogató csapat egy tagjának megjelenítendő nevét, amennyiben a személyzet tagja

Kérlek, implementáld a SecurityPassMaker.GetDisplayName() metódust. A Staff-ból leszármazó összes osztály példányánál a Title mező értékét adja vissza, egyébként pedig a „Too Important for a Security Pass” szöveget.

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

2. Szabd testre a biztonsági csapat megjelenítendő nevét

Kérlek, módosítsd a SecurityPassMaker.GetDisplayName() metódust. Úgy kell viselkednie, mint az 1. részfeladatban, azzal a kivétellel, hogy ha a személyzeti tag a biztonsági csapat tagja (akár Security típusú, akár annak valamelyik leszármazottja), akkor a cím után a „ Priority Personnel” szöveget kell megjeleníteni.

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. Csak a biztonsági csapat fő tagjait jelöld ki kiemelt személyzetként

Kérlek, módosítsd a SecurityPassMaker.GetDisplayName() metódust. Úgy kell viselkednie, mint a 2. részfeladatban, azzal a kivétellel, hogy a „ Priority Personnel” szöveget nem kell megjeleníteni a SecurityJunior, SecurityIntern és PoliceLiaison típusú példányok esetében.

var spm2 = new SecurityPassMaker();
spm2.GetDisplayName(new Security());
// => "Security Team Member Priority Personnel"
spm2.GetDisplayName(new SecurityJunior());
// => "Security Junior"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
C# Exercism

Készen állsz elkezdeni a(z) Biztonságos Munchester United feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.