Sobes.tech
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 και να έχει έναν κατασκευαστή χωρίς παραμέτρους.