Junior — Middle
Υπάρχουν περιορισμοί στον ορισμό του δικού σας καθολικού προτύπου (γενικού);
sobes.tech AI
Απάντηση από AI
Κατά τον ορισμό των δικών σας καθολικών προτύπων (generics) σε C#, υπάρχουν ορισμένοι περιορισμοί:
- Οι τύποι παραμέτρων πρέπει να είναι αναφορές, τύποι τιμών ή να έχουν συγκεκριμένους περιορισμούς (constraints), π.χ. κληρονόμηση από μια συγκεκριμένη κλάση, υλοποίηση μιας διεπαφής, ύπαρξη ενός κατασκευαστή χωρίς παραμέτρους.
- Δεν είναι δυνατή η άμεση χρήση primitive τύπων χωρίς περιορισμούς εάν απαιτείται συγκεκριμένη λειτουργικότητα.
- Δεν είναι δυνατή η δημιουργία στιγμιότυπων του τύπου παραμέτρου χωρίς τον περιορισμό new(), καθώς ο μεταγλωττιστής δεν γνωρίζει πώς να τον αρχικοποιήσει.
- Δεν είναι δυνατή η χρήση των τελεστών typeof(T) ή is T χωρίς περιορισμούς.
Παράδειγμα περιορισμού:
public class Repository<T> where T : IEntity, new()
{
public T CreateNew() => new T();
}
Εδώ, το T πρέπει να υλοποιεί το interface IEntity και να έχει έναν κατασκευαστή χωρίς παραμέτρους.