Ο όρος where χρησιμοποιείται για τον καθορισμό περιορισμών τύπου που μπορούν να χρησιμεύσουν ως μεταβλητές για παραμέτρους τύπου που ορίζονται σε γενικές δηλώσεις. 1. Περιορισμοί διεπαφής. Για παράδειγμα, μπορείτε να δηλώσετε μια γενική κλάση MyGenericClass, έτσι ώστε η παράμετρος τύπου T να μπορεί να υλοποιήσει τη διεπαφή IComparable<T>:
δημόσια τάξη MyGenericClass<T> όπου T:IComparable { }
2. Περιορισμός βασικής κλάσης: Υποδεικνύει ότι ένας τύπος πρέπει να χρησιμοποιεί την καθορισμένη κλάση ως βασική κλάση (ή την ίδια την κλάση) για να χρησιμοποιηθεί ως παράμετρος τύπου για αυτόν τον γενικό τύπο. Μόλις χρησιμοποιηθεί ένας τέτοιος περιορισμός, πρέπει να εμφανίζεται πριν από όλους τους άλλους περιορισμούς στον τύπο της παραμέτρου. τάξη MyClassy<T, U> όπου T : τάξη όπου U : struct
{
}
Η ρήτρα 3.where μπορεί επίσης να περιλαμβάνει περιορισμούς κατασκευαστή. Μπορείτε να χρησιμοποιήσετε τον νέο τελεστή για να δημιουργήσετε μια παρουσία μιας παραμέτρου τύπου. Αλλά το όρισμα τύπου πρέπει να περιορίζεται από τον περιορισμό του κατασκευαστή new() για αυτό. Ο περιορισμός new() επιτρέπει στον μεταγλωττιστή να γνωρίζει ότι κάθε τύπος ορίσματος που παρέχεται πρέπει να έχει έναν προσβάσιμο κατασκευαστή χωρίς παραμέτρους (ή προεπιλογή). Για παράδειγμα: δημόσια τάξη MyGenericClass <T> όπου T: IComparable, new()
{ Η ακόλουθη γραμμή δεν είναι δυνατή χωρίς τον περιορισμό new(): Στοιχείο T = νέο T();
} Ο περιορισμός new() εμφανίζεται στο τέλος της ρήτρας where.
4. Για παραμέτρους πολλαπλών τύπων, κάθε παράμετρος τύπου χρησιμοποιεί έναν όρο where, Για παράδειγμα: διεπαφή MyI { } Λεξικό τάξης<TKey, TVal> όπου TKey: IComparable, IEnumerable όπου TVal: MyI
{ δημόσιο κενό Add(TKey key, TVal val)
{
}
}
5. Μπορείτε επίσης να επισυνάψετε περιορισμούς σε παραμέτρους τύπου γενικών μεθόδων, όπως:
public bool MyMethod<T>(T t) όπου T : IMyInterface { }
Σημειώστε ότι η σύνταξη για την περιγραφή των περιορισμών παραμέτρων τύπου είναι η ίδια τόσο για τους πληρεξούσιους όσο και για τις μεθόδους:
delegate T MyDelegate<T>() όπου T : new()
Γενικό Όπου
Generic Where μπορεί να χαρακτηρίσει παραμέτρους τύπου. Υπάρχουν διάφοροι τρόποι.
·όπου T : struct περιορίζει την παράμετρο τύπου που πρέπει να κληρονομήσει το T από το System.ValueType.
·όπου T: η κλάση περιορίζει τον τύπο Η παράμετρος T πρέπει να είναι τύπος αναφοράς, δηλαδή δεν μπορεί να μεταβιβαστεί από το System.ValueType.
όπου T : new() περιορίζει την παράμετρο τύπου Η T πρέπει να έχει έναν προεπιλεγμένο κατασκευαστή
·όπου T : Το NameOfClass περιορίζει την παράμετρο τύπου που πρέπει να κληρονομήσει το T από μια κλάση ή να υλοποιήσει μια διεπαφή.
Αυτά τα προσδιοριστικά μπορούν να συνδυαστούν, όπως: δημόσια τάξη Σημείο όπου T : class, IComparable, new() |