2010-08-04 3 views
1

J'ai besoin de créer un ensemble de classes statiques et tous ont besoin d'implémenter les mêmes méthodes. Je veux trouver un moyen de les forcer ainsi.Comment forcer une classe statique à implémenter des méthodes spécifiques?

Je comprends que les classes statiques ne peuvent pas dériver autre chose que System.Object. Dois-je utiliser des méthodes non statiques pour cela? Il pourrait être, mais aucune des méthodes de cette classe utilisera des propriétés d'instance ...

Mon meilleur tir est que je devrais utiliser un singleton. Je vais utiliser une instance alors, mais au moins je ne suis pas obligé d'instancier la classe chaque fois que j'ai besoin d'utiliser une méthode.

Quelle est l'alternative que vous suggérez?

EDIT:

Je n'implémenterai pas ces méthodes. J'ai besoin de forcer d'autres développeurs à implémenter des méthodes spécifiques avec des signatures spécifiques. Toutes les signatures sont les mêmes pour chaque classe. C'est tout. Imaginez que vous ayez une classe statique qui récupère les enregistrements d'une base de données dans votre bureau. Vous avez plusieurs méthodes pour le faire. Comme aucune de ces méthodes ne partage les variables, elles sont marquées comme statiques, tout comme la classe. Maintenant, vous et d'autres développeurs de votre équipe devez faire la même chose pour d'autres bases de données ou même des API hors de votre contrôle, cela n'a pas d'importance. Vous voulez forcer vos collègues à implémenter toutes ces classes avec exactement les mêmes méthodes avec les mêmes signatures.

Vos commentaires sont toujours les bienvenus, mais maintenant je veux juste trouver le moyen le plus proche de le faire.

Je pourrais utiliser une classe abstraite dont tous les autres hériteraient. Mais comme ces méthodes ne partagent rien, je préférerais ne pas instancier la classe chaque fois que j'en aurais besoin.

C'est pourquoi j'ai mentionné l'utilisation du motif singleton. Ne devrais-je pas le faire?

+4

Pourquoi avez-vous besoin des classes statiques pour implémenter des méthodes spécifiques? La raison pour laquelle vous avez généralement besoin de méthodes spécifiques pour être présent est d'activer le polymorphisme, c'est-à-dire d'être capable de transmettre des instances de différents types d'objets qui peuvent être traités de la même manière. Un tel concept n'a aucun sens pour les classes statiques car il n'y a pas d'exemples de classes statiques. –

+2

Pouvez-vous expliquer pourquoi vous voulez faire des classes statiques ont tous les mêmes méthodes, il peut aider les autres à donner plus de suggestions. (Pour le moment, je ne peux pas penser pourquoi quelqu'un voudrait faire ça!) – MikeG

+0

@ Mike G ... EXACTEMENT !!!! – IbrarMumtaz

Répondre

0

Si je lis votre question correctement, le singleton ne fonctionnerait pas à moins que vous n'ayez eu beaucoup de surcharges sur vos méthodes. Alors que nous parlons d'Interfaces et de Classes de Base, et ainsi de suite, si vous contrôlez le code, y a-t-il une raison pour laquelle vous ne pouvez pas créer un ensemble de classes qui implémenteraient toutes les méthodes requises? Vous auriez besoin de documenter ce que vous avez fait et pourquoi, bien sûr, mais autre que de coller avec « convention » avez-vous une raison pour ne pas faire cela?

Si vous utilisez des classes statiques, qui ne héritent rien au-delà System.Object et mettre en œuvre aucune interface, vous ne pouvez pas les appeler de toute façon interchangeable. En fonction de votre modification, il semble que vous essayiez d'appliquer ce qui devrait être une politique de codage à travers le code lui-même. Chaque magasin de développement a ses propres politiques, procédures et normes, de la documentation à la mise en page du projet en passant par les signatures de méthodes. Mon client actuel est très stricte sur les signatures de méthode parce que nous passons beaucoup de choses à et de BizTalk et sa douleur pour changer une solution BizTalk juste parce que quelqu'un ne voulait pas suivre le modèle le reste de l'équipe utilise.

Si ce sont les membres de votre équipe qui écrivent ces classes statiques et des méthodes statiques, je ne vois pas une raison (au-delà de la politique de bureau possible) pourquoi vous ne pourriez pas le faire en mettant en œuvre une politique.

Si vous devez le faire par le biais du code, je pense que vous êtes coincé avec une interface et des méthodes d'instance. Si vous le vouliez, une fois ces méthodes d'instance créées, vous pourriez écrire des classes auxiliaires statiques comme wrappers (donc vous n'avez pas besoin d'instancier les objets à chaque fois), mais je ne sais pas vous obtenez quelque chose.

+0

la raison pour laquelle je veux faire cela est dans le fait que je ne vais pas implémenter toutes les classes en question. Je n'aurais pas besoin de surcharges pour quoi que ce soit, car les méthodes acceptent une variable qui est une instance d'une classe dont les propriétés sont les options autorisées. Que voulez-vous dire par votre dernier paragraphe? Je ne peux pas appeler les méthodes dans les classes statiques de manière interchangeable? Appelez 1, 2, puis 3 et ensuite 2? J'ai cherché google traducteur pour ce mot, mais je ne suis pas sûr de ce que vous voulez dire. Lisez la section d'édition de la question. Merci! –

+0

@Fabio Milherio: Si j'ai la classe statique Foo' avec la méthode 'DoStuff()' et la 'static class Bar' avec la méthode' DoStuff', je dois encore spécifier quelle classe j'ai besoin: 'Foo.DoStuff()' ou ' Bar.DoStuff() ' – AllenG

Questions connexes