Διαδρομές
/
C#
C#
/
Ασκήσεις
/
Secure Munchester United
Secure Munchester United

Secure Munchester United

Άσκηση εκμάθησης

Εισαγωγή

Casting

Το casting και η μετατροπή τύπου είναι διαφορετικοί τρόποι για να μετατρέψεις μια παράσταση από έναν τύπο δεδομένων σε έναν άλλον.

Μια παράσταση μπορεί να υποστεί casting σε έναν άλλον τύπο με τον τελεστή casting (<type>).

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

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

Αν οι τύποι δεν είναι συμβατοί, το πρόγραμμα πετάει ένα στιγμιότυπο της InvalidCastException. Στην περίπτωση των αριθμών, αυτό σημαίνει ότι ο τύπος που δέχεται την τιμή δεν μπορεί να αναπαραστήσει την τιμή που μετατρέπεται. Στην περίπτωση των κλάσεων, ο ένας από τους τύπους πρέπει να προέρχεται από τον άλλον (αυτό ισχύει προφανώς και για τις δομές).

Μια εναλλακτική στο casting είναι η μετατροπή τύπου με τον τελεστή 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(). Θα πρέπει να επιστρέφει την τιμή του πεδίου Title για στιγμιότυπα όλων των κλάσεων που κληρονομούν από την Staff και, σε διαφορετική περίπτωση, "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 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.