7
votes

Type générique avec restriction d'espace de noms

Tout le monde sait xxx

mais existe-t-il un moyen de restreindre t aux classes qui existe dans un espace de nom comme xxx

meilleures salutations


1 commentaires

Les espaces de noms ne sont que des noms, ils ne contribuent pas au contrat du type (contrairement aux implémentations d'héritage ou d'interface). Les contraintes de type générique concernent des hypothèses contractuelles. Par conséquent, leurs espaces de noms ne sont pas pertinents.


4 Réponses :


13
votes

non. Il n'y a aucun moyen de contraindre un type générique à un espace de noms.


0 commentaires

1
votes

non. Les contraintes concernent le comportement spécifiant - que cela soit aussi simple que d'être une classe, mettant en œuvre une interface donnée ou autre. C'est pas à propos de quel espace de noms une classe est définie dans - qui ne dit rien sur son comportement.

voir Contraintes sur les paramètres de type pour un résumé de contrainte


0 commentaires

2
votes

Les contraintes d'espace de noms ne sont pas possibles. Quoi qu'il en soit, cela ne fait aucun sens car tout le monde peut créer des cours situés dans l'espace de noms cible. Il ne ferait peut-être que Sence si vous pouvez le limiter à un assemblage spécifique.

ferait plus de sens si vous pouvez le limiter à n des types comme les lignes suivantes (ne fonctionne pas): < / p> xxx

Voir contraintes

http://msdn.microsoft.com/en-us/library/d5x73970.aspx


0 commentaires

0
votes

Vous pouvez trier de cela en créant une interface avec une portée interne et en utilisant cela dans votre générique où la clause (classe générique / méthode devrait être dans le même assemblage). Ensuite, vous ne pourrez peut-être l'utiliser que des classes dans le même assemblage qui implémentent cette interface.

Si vous aviez besoin de passer des cours d'un autre assemblage, vous pouvez ajouter un global :: internalsvisibletoTtribute («autre nom d'assemblys») au fichier AssemblyInfo.

Tout ce qui étant dit, il ne ressemble toujours pas à la sorte de chose à essayer de réaliser.


1 commentaires

En fait, ignorez cela, vous pouvez simplement faire votre méthode générique interne.