Sobes.tech
Middle

Μπορείτε να περιορίσετε τους τύπους που θα μεταφέρει ο χρήστης μέσω προτύπου σε C#;

sobes.tech AI

Απάντηση από AI

Ναι, χρησιμοποιώντας περιορισμούς γενικών τύπων (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T πρέπει να υλοποιεί το IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T πρέπει να είναι τύπος αναφοράς
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T πρέπει να είναι τύπος τιμής
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Συνδυασμένοι περιορισμοί
{
    // ...
}

Τύποι περιορισμών:

  • where T : struct: Ο τύπος πρέπει να είναι τύπος τιμής (όχι nullable).
  • where T : class: Ο τύπος πρέπει να είναι τύπος αναφοράς.
  • where T : new(): Ο τύπος πρέπει να έχει δημόσιο κατασκευαστή χωρίς παραμέτρους. Αυτός ο περιορισμός δεν μπορεί να χρησιμοποιηθεί ταυτόχρονα με struct και class.
  • where T : BaseClass: Ο τύπος πρέπει να κληρονομεί από το BaseClass ή να είναι ο ίδιος το BaseClass.
  • where T : IInterface: Ο τύπος πρέπει να υλοποιεί το interface IInterface.
  • where T : U: Ο τύπος T πρέπει να είναι ή να κληρονομεί από το U, όπου το U είναι άλλος παράμετρος τύπου.

Μπορούν να συνδυαστούν πολλοί περιορισμοί διαχωρισμένοι με κόμμα. Οι περιορισμοί στην βασική κλάση ή το interface πρέπει να δηλώνονται πρώτοι.