2009-01-16 10 views
0

J'ai une interface très fine qui va définir une méthode. Dois-je exiger le paramètre type sur la définition de classe?La conception d'une interface générique nécessite le paramètre type sur le type ou la méthode?

public interface ISomethingFun<T> 
{ 
    void Do(T item); 
} 

ou la définition de la méthode?

public interface ISomethingFun 
{ 
    void Do<T>(T item); 
} 

Quelle logique? Est-il plus facile à implémenter, hériter ou générer dynamiquement? Est-ce le style? Y a-t-il des directives OO qui s'appliquent?

Répondre

1

L'avantage d'avoir le générique sur la méthode est qu'il facilite l'inférence de type.

void Example(ISomethingFun fun) { 
    fun.Do(42); 
} 

Voilà, un appel complètement générique, pas de paramètres génériques. Mettre le paramètre générique sur les forces de type vous d'ajouter des signatures génériques ou des liaisons à chaque fois que le type est indiqué dans les métadonnées

void Example2<T>(ISomethingFun<T> fun) { ... } 

Ce n'est pas nécessairement une mauvaise chose et est en fait souvent nécessaire. C'est juste une différence.

En général cependant, si chaque méthode a le même paramètre générique, il suffit d'ajouter le type :)

0

Ceci est juste mon sentiment, mais comme il y a une seule méthode, je mettrais sur le méthode.

De cette façon, les appelants Do < T> n'ont pas besoin de spécifier explicitement T.

SomethingFun fun = new SomethingFun(); 
fun.Do(DateTime.Now); 
1
  • Mettez-le sur la classe si les offres de classe avec T de.
    • Un exemple spécifique: Une liste des ints - vous recherchez 42.
List<int> g; 
g.Find(42); 
  • Mettre sur la méthode si la classe ne traiter avec des T mais la méthode fait.
    • Un exemple spécifique: une liste d'objets, vous recherchez un entier avec une valeur de 42.
ArrayList g; 
g.Find<int>(42) 
1

Il devrait être mis sur l'interface.

Le consommateur de l'interface devrait pouvoir contraindre le type attendu. Il ne peut le faire qu'en contraignant le type de ISomethingFun. Et le responsable de la mise en œuvre devrait savoir à quel type s'attendre. Si le paramètre générique était sur la méthode, alors l'implémenteur devrait gérer n'importe quel type, et le consommateur n'aurait aucun mot à dire.

Questions connexes