J'essaie de créer une conception pour une sorte d'interface Iexecutable. Je ne vais pas entrer dans les détails, mais le but est que j'ai plusieurs actions qui doivent être exécutées à partir d'une classe de base. Ils peuvent prendre différents paramètres (pas de gros problème), et ils peuvent ne pas renvoyer une valeur.
Jusqu'à présent, c'est mon design: p> jusqu'à présent, Chacune de mes actions concrètes doit être un enfant d'une action et de la base de l'action, mais je n'aime vraiment pas ça. Si je pouvais déplacer la définition de l'exécution à actionbase, envisagez que la classe de béton peut ne pas renvoyer une valeur, j'aurai atteint mon objectif. strong> p> Quelqu'un m'a dit que cela pourrait être fait avec l'utilisation de Func et d'Action, pour lesquels je suis totalement d'accord, mais je ne trouve pas un moyen d'avoir cela en une seule classe de sorte que l'appelant sache si l'action va retourner une valeur ou non. P > BREF: Je veux faire quelque chose comme: p>
4 Réponses :
Vous savez que vous pouvez ignorer la valeur de retour d'une méthode exacte? Vous ne avez pas em> pour l'utiliser. P>
Oui, vous êtes correct à ce sujet, mais je ne pense pas que ce serait quelque chose de conception d'avoir. En outre, quelqu'un m'a suggéré de retourner toujours Bool pour ces non-retours qui indiqueraient simplement que l'opération a réussi, mais je pense aussi que ce n'est pas correct. Si l'opération ne doit pas renvoyer une valeur, pourquoi le forcer?
@Alpha - Je suis d'accord avec vous que si une opération ne renvoie pas naturellement quelque chose, cela ne devrait pas. Retourner «True» n'est pas correct car Egnerally, vous ne devriez pas retourner «False», vous devriez vous lancer une exception. Cependant, je ne comprends toujours pas votre objectif de conception - votre objectif semble être basé sur le sucre syntaxique et je ne vois pas ce que vous accomplissez pour que vous ne puissiez pas obtenir d'action et de func à résoudre. Je pense que vous devez expliquer quel est le problème avec eux?
Si vous voulez une solution légère, l'option la plus simple consisterait à écrire deux classes en béton. On contiendra une propriété de type alors vous pouvez construire le deux types comme celui-ci: p> si vous ne voulez pas faire Le fait que c # a besoin de deux délégués différents pour représenter des fonctions et des actions est assez gênante. Une solution de contournement que les personnes utilisent est de définir une unité code> de type code> qui représente "aucune valeur de retour" et l'utiliser au lieu de pour créer un action code> et l'autre une propriété de type
Func
action code> Propriété lecture / écriture, alors vous pourriez passer le délégué d'action en tant que Argument au constructeur et faire la propriété en lecture seule. P>
void code>. Ensuite, votre type serait juste
Func
Func
action code>. Le type code> unité code> pourrait ressembler à ceci: p>
func
Merci. Je sais que j'ai attendu longtemps avant de marquer votre réponse, mais je voulais vraiment voir si quelqu'un est venu avec une solution. Même lorsque votre approche ne résout pas tout à fait le problème, c'est vraiment une bonne réponse et montre une solution de contournement bonne et belle sur la façon de surmonter ce problème.
Qu'en est-il de quelque chose de simple:
J'ai également pensé à quelque chose de similaire, mais mon problème est que je ne saurai pas au moment de la compilation du type de type de compilation. Je pourrais toujours faire d'actionExecuter
Les interfaces suivantes doivent faire le tour - il copie essentiellement le motif nullable
En tant que clarification: mon objectif est d'avoir un résumé exécuté dans ActionBase et d'éviter de créer une actionWithResultBase et une actionWithouTResultBase.