Tout le monde sait mais existe-t-il un moyen de restreindre meilleures salutations p> p> t code> aux classes qui existe dans un espace de nom comme p>
4 Réponses :
non. Il n'y a aucun moyen de contraindre un type générique à un espace de noms. P>
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 em> à propos de quel espace de noms une classe est définie dans - qui ne dit rien sur son comportement. p>
voir Contraintes sur les paramètres de type pour un résumé de contrainte p >
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 code> des types comme les lignes suivantes (ne fonctionne pas): < / p> Voir contraintes h3>
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. P>
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. P>
Tout ce qui étant dit, il ne ressemble toujours pas à la sorte de chose à essayer de réaliser. p>
En fait, ignorez cela, vous pouvez simplement faire votre méthode générique interne.
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.