Comment puis-je utiliser l'interface comme un C# de type générique de contrainte?

Est-il un moyen d'obtenir la déclaration de fonction suivante?

public bool Foo<T>() where T : interface;

ie. où T est un type d'interface (similaire à where T : class, et struct).

Actuellement, j'ai installé pour:

public bool Foo<T>() where T : IBase;

Où IBase est définie comme une interface vide qui est hérité par tous mes interfaces personnalisées... Pas l'idéal, mais il devrait fonctionner... Pourquoi ne peut-on pas définir un type générique doit être une interface?

Pour ce que ça vaut, je la veux parce que Foo est en train de faire de réflexion où il a besoin d'un type d'interface... j'ai pu passer comme une normale de paramètres et de faire le nécessaire de vérifier dans la fonction elle-même, mais cela semblait beaucoup plus typesafe (et, je suppose, un peu plus performant, puisque tous les contrôles sont effectués à l'compile-time).

  • En fait, votre IBase dea est le meilleur que j'ai vu jusqu'à présent. Malheureusement, vous ne pouvez pas l'utiliser pour les interfaces ne vous appartient pas. Tous les C# serait d'avoir toutes les interfaces hériter de IOjbect comme toutes les classes héritent de l'Objet.