2010-02-25 3 views
1

J'ai beaucoup de nombreuses fonctions (100+ estimé) et plus de la moitié sont seulement nécessaires dans le fichier son défini. Existe-t-il un moyen de définir des fonctions pour que la portée soit au niveau du fichier?Fonctions scope à un niveau de fichier en C#/.NET?

+0

Pouvez-vous ajouter plus d'informations à cette question, il n'est pas clair comment vous voulez limiter la portée des fonctions au niveau d'un fichier. S'agit-il de classes ou de classes partielles ou d'une autre construction? Quel est le but des restrictions? Pourquoi avoir des fonctions dans un 'fichier' qui ne sont pas nécessaires? Serait-il préférable de refactoriser votre code pour séparer les 100+ fonctions en plus petites collections pour réduire le nombre de fonctions 'dans la portée' à tout moment. – Lazarus

Répondre

2

Premièrement; C# a des méthodes, pas des fonctions ;-p

Les méthodes sont limitées au type; Si vous essayez de limiter à un fichier , puis-je supposer qu'il s'agit d'une classe partielle (ou peut-être un ensemble de types imbriqués) qui est (/ sont) répartis sur plusieurs fichiers? Si ce n'est pas le cas (et il s'agit d'un fichier unique) il suffit de rendre les méthodes privées. Si elle est actuellement partielle, alors non: il n'y a aucun moyen d'éviter les appels croisés entre différents fichiers de même type. Vous pouvez créer des types statiques imbriqués par partie partielle, mais cela semble moche, hacky, et tout simplement faux.

Si cela ne vous blesse pas activement - peut-être ne le changez pas?

+0

@Marc, l'autre possibilité est que l'OP parle de _fichier_ parce qu'il ne comprend pas la POO. –

+0

Oui c'est une classe partielle. Je suppose que je suis juste inquiet si je donne à quelqu'un d'autre de maintenir le code (c'est un projet personnel et un site astucieux) il aura très peur. Peut-être pas en lisant le code mais en faisant des changements et en cherchant la bonne fonction. –

2

Non. Il n'y a aucun moyen de restreindre l'accès à un seul "fichier". Vous pouvez mettre toutes les fonctions dans une seule classe et faire celles que vous voulez protéger private. Vous pouvez également placer toutes les fonctions dans un autre assemblage et créer les fonctions protégées internal.

+0

Une idée si je peux en quelque sorte créer une classe privée et que le pointeur 'this' accède à tout ce que la classe externe peut accéder? (probablement pas) –

+0

Les classes internes peuvent accéder aux membres privés dans les classes externes. C'est encore une autre solution. Cela ne semble pas très différent de simplement rendre les méthodes privées dans la classe externe directement à moi. –

+0

hmm, je vois qu'une classe interne peut accéder aux membres de la classe externe * static *. Mais il ne semble pas pouvoir accéder à 'ceci '. Cela ne semble pas fonctionner comme je l'espère. Pour accéder à tout ce que l'autre fonction peut faire avec cela. Copier/coller une fonction dans la classe interne provoque de nombreuses erreurs de compilation. Je comprends pourquoi ça marche mais j'espérais que ça marcherait. –

0

Vous pouvez limiter la portée à un ensemble à l'aide de internal, mais pas au niveau du fichier.