Tracks
/
C#
C#
/
Übungen
/
Secure Munchester United
Secure Munchester United

Secure Munchester United

Lernübung

Einführung

Casting

Casting und Typkonvertierung sind unterschiedliche Wege, einen Ausdruck von einem Datentyp in einen anderen umzuwandeln.

Ein Ausdruck kann mit dem Cast-Operator (<type>) in einen anderen Typ umgewandelt werden.

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

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

Wenn die Typen nicht kompatibel sind, wird eine Instanz von InvalidCastException ausgelöst. Bei Zahlen heißt das, dass der Zieltyp den umgewandelten Wert nicht darstellen kann. Bei Klassen muss einer der Typen vom anderen abgeleitet sein (bei Structs gilt das trivialerweise genauso).

Eine Alternative zum Casting ist die Typkonvertierung mit dem Operator is. Sie wird typischerweise bei Referenz- und Nullable-Typen eingesetzt.

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

Wenn du den genauen Typ eines Objekts ermitteln musst, ist is vielleicht etwas zu großzügig, denn es liefert wahr für eine Klasse und für jede Klasse und jedes Interface, von dem sie direkt oder indirekt abgeleitet ist. typeof und Object.GetType() sind in diesem Fall die Lösung.

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

Anleitung

Unser Fußballverein football-match-reports ist in den Ligen auf dem Vormarsch, und du bist eingeladen, noch etwas mehr Arbeit zu übernehmen, diesmal am System zum Drucken der Sicherheitsausweise.

Die Klassenhierarchie des Personals hinter den Kulissen sieht wie folgt aus

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

Eine vollständige Implementierung der Hierarchie ist als Teil des Quellcodes der Übung enthalten.

Alle Daten, die an den Generator für Sicherheitsausweise übergeben werden, wurden validiert und sind garantiert nicht null.

1. Anzeigenamen für ein Mitglied des Supportteams ermitteln, sofern es sich um Mitarbeiter handelt

Implementiere bitte die Methode SecurityPassMaker.GetDisplayName(). Sie soll den Wert des Feldes Title für Instanzen aller von Staff abgeleiteten Klassen zurückgeben, andernfalls „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. Anzeigenamen für das Sicherheitsteam anpassen

Ändere bitte die Methode SecurityPassMaker.GetDisplayName(). Sie soll sich wie in Aufgabe 1 verhalten, außer dass der Text „ Priority Personnel“ hinter dem Titel angezeigt werden soll, wenn der Mitarbeiter zum Sicherheitsteam gehört (entweder vom Typ Security oder von einer seiner Ableitungen).

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. Nur die eigentlichen Mitglieder des Sicherheitsteams als Priority-Personal kennzeichnen

Ändere bitte die Methode SecurityPassMaker.GetDisplayName(). Sie soll sich wie in Aufgabe 2 verhalten, außer dass der Text „ Priority Personnel“ für Instanzen der Typen SecurityJunior, SecurityIntern und PoliceLiaison nicht angezeigt werden soll.

var spm2 = new SecurityPassMaker();
spm2.GetDisplayName(new Security());
// => "Security Team Member Priority Personnel"
spm2.GetDisplayName(new SecurityJunior());
// => "Security Junior"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
C# Exercism

Bereit, mit Secure Munchester United zu starten?

Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.