2010-11-18 4 views
1

J'ai une classe qui hérite de DynamicObject et remplace certains de ses membres. Je me demandais s'il y avait des trucs que je pouvais utiliser qui rendaient ceci 'implicitement' dynamique (ou au moins l'apparence de), de sorte que quand je veux ajouter dynamiquement des membres à l'intérieur de la classe je n'aurais pas à faireRendre "ceci" implicitement dynamique

((dynamic)this).Whatever = 10; 

Il serait beaucoup mieux si je pouvais faire

Whatever = 10; 

Je suis juste Smasher des choses je ne peux pas ajouter un contexte réel à cela et non, Ruby est pas la solution cette fois;)

Je pourrais l'envelopper dans une propriété mais il ajouterait à l'API de la fonctionnalité si nce je devrais faire

Property.Whatever = 10; 
+2

Non, c'est impossible. –

+0

Vous pouvez jeter un oeil à la question ici http://stackoverflow.com/questions/1502276/c-4-0-dynamic-this-pointer. –

Répondre

0

Ne serait-il pas plus facile de simplement les ajouter en tant qu'attributs non-dynamiques? Si vous utilisez "this" dans votre classe, vous êtes sûr que ces attributs devront déjà être là, non?

Je ne connais pas beaucoup les classes dynamiques, alors corrigez-moi si je me trompe!

+0

En fait non. C'est une classe de base et je veux ajouter dynamiquement des membres aux héritiers de la classe, puis inspecter les implémenteurs à l'exécution s'ils fournissent des méthodes spécifiques. Je sais que ça a l'air dingue mais il y a un point + c'est seulement une preuve de concept spike :) – TheCodeJunkie

4

Pourquoi ne pas simplement étendre la base de données?

public class DynamicObjectEx : DynamicObject 
{ 
    protected dynamic self 
    { 
     get 
     { 
      return this; 
     } 
    } 
} 

Ou vous pouvez tout simplement passer à VB.NET avec option stricte hors tension ou quel que soit le réglage est ;-)

+0

Cela nécessiterait l'invocation d'être soi-même. – TheCodeJunkie

+0

Nevermind .. J'ai lu votre code en tant que substitution d'une auto-propriété sur DynamicObject, ce qui n'est pas le cas. Oui, c'est la même solution que j'ai dite avec Property.Whatever – TheCodeJunkie

1

Il est impossible. Votre approche avec le Property.Whatever est la voie à suivre.

Questions connexes