puis-je exposer une classe d'un autre espace de noms .net en tant que classe dans mon espace de noms?

StackOverflow https://stackoverflow.com/questions/138638

  •  02-07-2019
  •  | 
  •  

Question

Puis-je exposer une classe d'un autre espace de noms .net en tant que classe de mon espace de noms? J'utilise une classe - antlr.collections.AST - comme type de retour pour une fonction appartenant à une classe de mon espace de noms; en conséquence, l'utilisateur doit avoir

using antlr.collections;
using myNamespace;

en haut de leurs fichiers afin d’utiliser ma fonction. Puis-je faire de myNamespace.AST un alias pour antlr.collections.AST, de sorte que l'utilisateur ne doit avoir que

using myNamespace;

en haut de leurs fichiers?

Était-ce utile?

La solution

N'oubliez pas que les utilisateurs de votre code n'auront pas besoin d'avoir besoin d'utiliser des instructions. Ceux-ci sont là pour faciliter leur vie, ils ne doivent donc pas taper antlr.collections.Foo et antlr.collections.Bar partout dans leur source.

Le plus gros " impact " (si effectivement il y en a un grave) est que le consommateur de votre code aura besoin d'une référence absolue à l'assembly où antlr.collections est défini.

Cependant, si cela est documenté dès le départ, je ne pense vraiment pas que ce soit un gros problème. Ce n'est pas différent du consommateur d'un DAL généré par SubSonic ayant besoin de références à la fois à l'assemblage DAL généré et à l'assemblage SubSonic d'origine. (Et, très probablement, en utilisant des déclarations aussi.)

Les dépendances sont ce qu’elles sont. Il y a une raison pour laquelle les classes sont divisées en espaces de noms - principalement pour l'organisation et pour réduire les conflits de noms. Ne sachant pas quelles classes se trouvent dans l'espace de noms que vous avez mentionné, je ne sais pas quelle est la probabilité d'un tel conflit dans votre scénario… en dériver une classe vide, ce n’est probablement pas la meilleure idée. Cela ne tuerait pas les consommateurs de votre classe d’avoir une autre référence et une déclaration using.

Autres conseils

Pourquoi ne pas dériver une classe utilisant le même nom dans le nouvel espace de noms? Je voulais dire:

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}

créez une nouvelle classe qui hérite de la classe dans votre nouvel espace de nom. Ce n’est pas idéal, mais c’est utile pour les tests unitaires et autres.

Vous devriez cependant réfléchir à la raison pour laquelle vous le faites, les classes sont divisées en espaces de noms pour une raison.

Non, vous ne pouvez pas.

Le chemin d'accès complet et le nom d'une classe font partie de son identité.

Si vous dérivez de la classe et renvoyez votre classe dérivée, vous serez tenu de fournir toute la documentation relative au type de retour.

Je pense que vous ne rendrez pas service aux développeurs qui utilisent votre bibliothèque, car ils ne sauront pas nécessairement qu'ils travaillent vraiment avec un type d'antir.collections (même si je ne sais même pas ce que c'est, mais ce n'est pas le point). Si le développeur vient sur StackOverflow.com pour rechercher des informations sur ce type de retour, ont-ils plus de chance de trouver des informations si le type provient d'un "commun" " bibliothèque ou de la vôtre?

La seule solution consiste à masquer toute la dépendance au type antlr.collections.AST.

Vous pouvez utiliser un adaptateur à cette fin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top