2009-07-22 3 views
3

Je crée une classe de conversion pour la fréquence, et je voulais permettre à mon équipe d'ajouter des conversions supplémentaires quand elles sont nécessaires.Extensibilité de classe de conversion (Méthodes d'extension par rapport à la classe parentale)

Frequency myFrequency = new Frequency(100, MHz); 
double value = myFrequency.InKhz(); 

Le code source de la classe ne sera pas inclure dans les futurs projets, je vais donc soit avoir la classe une classe partielle ou les conversions supplémentaires devront être des extensions. Un exemple serait d'ajouter une conversion en GHz

myFrequency.InGHz() 

Quelle est la meilleure façon de procéder? Mise à jour: Après avoir lu la réponse de Randolpho, je vais avec l'approche de la méthode d'extension. Comme le temps le permet, les extensions seront intégrées dans le code de base, mais je n'ai pas voulu que les autres membres de l'équipe attendent les assemblages mis à jour, ce qui leur permet de passer à la tâche suivante un peu plus rapidement.

Répondre

3

Les classes partielles ne fonctionneront que si vous avez la source d'origine. Si vous refusez l'accès des développeurs à cette source, leur seule alternative est d'utiliser des méthodes d'extension.

Cela dit, vous voulez probablement avoir un processus pour mettre à jour la bibliothèque avec de nouveaux ajouts; on dirait qu'ils vont être rares.

+1

Merci. Je n'ai jamais essayé d'utiliser des classes partielles de la manière que j'ai décrite, j'ai juste supposé qu'ils fonctionneraient. –

1

Méthodes d'extension jusqu'au bout. Cela ne vous limitera pas, et les méthodes partielles ne peuvent être utilisées que dans l'assemblage, alors que les méthodes d'extension peuvent être déclarées n'importe où.

+0

C'est ce que je pensais, mais certains de mes collègues les méthodes d'extension sont "mauvais". –

+0

Les méthodes d'extension ne sont pas mauvaises à long terme, mais cela ne signifie pas que vous devriez résoudre tous vos problèmes avec elles. – Randolpho

+0

méthodes d'extension sont juste compilateur/syntaxe magique pour mapper automatiquement les méthodes statiques aux objets déjà créés. Les méthodes d'extension ne devraient pas être trop utilisées pour remplacer des méthodes normales. Mais ils devraient être utilisés pour étendre la fonctionnalité d'un objet que vous ne pouvez plus changer. –

0

Si vous voulez que ceci soit extensible sans compilation, vous devrez probablement créer une classe de conversion séparée. Cela vous permettra de spécifier les conversions lors de l'exécution et de les stocker dans une sorte de dictionnaire, mais n'aura malheureusement pas la même sensation de langage "intégré" que ce que vous étiez en train de taper. Sinon, les méthodes d'extension sont probablement votre meilleure option - mais elles nécessiteront une recompilation + une nouvelle bibliothèque chaque fois que vous voulez ajouter de nouvelles conversions.

Questions connexes