Duplicata possible :
Pourquoi C# ne permet-il pas aux méthodes statiques d'implémenter une interface ?
Dans mon application, je veux utiliser un référentiel qui fera l'accès aux données brutes ( TestRepository
, SqlRepository
, FlatFileRepository
etc). Étant donné qu'un tel référentiel serait utilisé tout au long de l'exécution de mon application, il m'a semblé judicieux d'en faire une classe statique, de sorte que je puisse faire ce qui suit
SqlRepository.GetTheThingById(5);
sans qu'il soit nécessaire de le régénérer en permanence. Comme je veux que mes référentiels soient interchangeables, je veux qu'ils mettent en œuvre une interface commune : IRepository
. Mais quand j'essaie de le faire, j'obtiens :
Les classes statiques ne peuvent pas implémenter les interfaces
Pourquoi ne peuvent-ils pas le faire ? Comment suggérez-vous que je modifie mon design alors ? Y a-t-il un modèle que je pourrais utiliser ?
UPDATE
Cinq ans plus tard : cette question est visitée plus de 20 000 fois, j'ai appris les inconvénients du modèle de dépôt, j'ai appris l'IoC et je me suis rendu compte que ma question était mal formulée.
Je ne demandais pas vraiment ce qu'est la spécification C# d'une interface, mais plutôt pourquoi elle me limitait délibérément de cette manière spécifique.
La réponse pratique est que la syntaxe pour appeler une méthode sur une instance ou sur un type est différente. Mais la question est close.
1 votes
Duplicata de stackoverflow.com/questions/259026 Je pense.
1 votes
Si votre message n'est pas fermé en tant que duplicata, pouvez-vous changer inherit en implement ? C'est un problème pour moi...
0 votes
Duplicata : stackoverflow.com/questions/3957424/
1 votes
@MichaelStum Ce n'est pas un doublon de l'un d'entre eux. Ceux-ci sont à propos de la statique méthodes la mise en œuvre de méthodes spécifiées par une interface mise en œuvre par la classe dont ces méthodes sont membres. Cette question porte sur les méthodes statiques classes la mise en œuvre des interfaces.
0 votes
J'ai écrit une réponse pour le duplicata lié, mais comme il s'agissait en fait d'une réponse pour cette question, elle n'avait pas de sens pour celle-là, et je ne peux pas la poster ici parce que cette question est fermée à tort. Je préfère ne pas avoir à ouvrir une réel duplicata.
0 votes
Pourquoi méprisez-vous le modèle de référentiel ? Cela et DI/IOC ne sont pas mutuellement exclusifs. Les référentiels n'ont pas besoin d'être statiques ou singletons. Ils fournissent juste une interface simple et cohérente pour obtenir et persister des objets qui, plus bas, nécessitent des opérations plus compliquées et granulaires pour obtenir et persister.
0 votes
@bubbleking ils sont parfaits pour les projets où vous n'avez pas besoin d'aller beaucoup plus loin que ce que l'ORM moyen vous donne en sortie de boîte. Sinon, les domaines étendus et compliqués conduisent à des objets monstres ou à de petits référentiels interdépendants. C'est tout ce que je peux dire dans une boîte de commentaires :)
0 votes
@BorisCallens Pouvez-vous s'il vous plaît me référer à un bon matériel sur les inconvénients du modèle de référentiel que vous avez mentionné ?
0 votes
Une bonne explication se trouve ici : codeproject.com/Answers/1184339/