2009-06-11 4 views
4

Je dois spécifier qu'un type générique pour ma classe implémente une interface, et est également un type de référence. J'ai essayé à la fois les extraits de code ci-dessous, mais ni le travailMultiple où pour le type générique

public abstract class MyClass<TMyType> 
    where TMyType : IMyInterface 
    where TMyType : class 

public abstract class MyClass<TMyType> 
     where TMyType : class, IMyInterface 

Je ne peux pas spécifier plusieurs clauses où pour un type, il est possible de le faire?

Répondre

7

Cette dernière syntaxe devrait être correcte (et compile pour moi). Le premier ne fonctionne pas parce que vous essayez de fournir deux contraintes sur le même paramètre de type, pas sur des paramètres de type différent.

Veuillez donner un exemple court mais complet de cette dernière syntaxe qui ne fonctionne pas pour vous. Cela fonctionne pour moi:

public interface IFoo {} 

public abstract class MyClass<T> 
    where T : class, IFoo 
{ 
} 
+0

Ok, merci. Vous avez raison, le deuxième extrait fonctionne. Désolé - compiler l'erreur que j'ai eu était quelque chose sans rapport avec cela quand j'ai essayé. J'aurais dû le lire correctement !! – Charlie

5

Une question sur la façon de définir des liens where multiples ici en tant que doublon. Si cette question est vraiment un doublon que la réponse complète doit contenir les deux cas.

Cas 1 - générique unique a de multiples contraintes:

public interface IFoo {} 

public abstract class MyClass<T> 
    where T : class, IFoo 
{ 
} 

Cas 2 - génériques multiples chacun avec leurs propres contraintes:

public interface IFoo1 {} 
public interface IFoo2 {} 

public abstract class MyClass<T1, T2> 
    where T1 : class, IFoo1 
    where T2 : IFoo2 
{ 
} 
Questions connexes