Sobes.tech
Middle

Peut-on limiter les types que l'utilisateur transmettra via un modèle en C#?

sobes.tech IA

Réponse de l'IA

Oui, en utilisant des contraintes de types génériques (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T doit implémenter IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T doit être un type de référence
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T doit être un type valeur
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Contraintes combinées
{
    // ...
}

Types de contraintes :

  • where T : struct : Le type doit être un type valeur (non nullable).
  • where T : class : Le type doit être un type de référence.
  • where T : new() : Le type doit avoir un constructeur public sans paramètres. Cette contrainte ne peut pas être utilisée avec struct et class en même temps.
  • where T : BaseClass : Le type doit hériter de BaseClass ou être BaseClass lui-même.
  • where T : IInterface : Le type doit implémenter l'interface IInterface.
  • where T : U : Le type T doit être ou hériter du type U, où U est un autre paramètre de type.

Il est possible de combiner plusieurs contraintes en les séparant par des virgules. Les contraintes sur la classe de base ou l'interface doivent être indiquées en premier.