Sobes.tech
Middle

Kann man die Typen einschränken, die der Benutzer über eine Vorlage in C# übermitteln wird?

sobes.tech KI

Antwort von AI

Ja, unter Verwendung von generischen Einschränkungen (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T muss IMyInterface implementieren
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T muss ein Referenztyp sein
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T muss ein Wertetyp sein
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Kombinierte Einschränkungen
{
    // ...
}

Arten von Einschränkungen:

  • where T : struct: Der Typ muss ein Wertetyp sein (nicht nullable).
  • where T : class: Der Typ muss ein Referenztyp sein.
  • where T : new(): Der Typ muss einen öffentlichen parameterlosen Konstruktor haben. Diese Einschränkung kann nicht gleichzeitig mit struct und class verwendet werden.
  • where T : BaseClass: Der Typ muss von BaseClass erben oder BaseClass selbst sein.
  • where T : IInterface: Der Typ muss die Schnittstelle IInterface implementieren.
  • where T : U: Der Typ T muss U sein oder von U erben, wobei U ein anderer generischer Parameter ist.

Mehrere Einschränkungen können durch Kommas getrennt kombiniert werden. Einschränkungen für die Basisklasse oder Schnittstelle müssen zuerst angegeben werden.