2010-11-18 12 views
1

Ich habe eine Klasse, die von DynamicObject erbt und überschreibt einige seiner Mitglieder. Ich habe mich gefragt, ob es irgendwelche Tricks gibt, die ich verwenden könnte, die 'das' implizit dynamisch (oder zumindest das Aussehen von) gemacht haben, so dass ich nicht mehrMaking "dies" implizit dynamisch

machen müsste, wenn ich Mitglieder innerhalb der Klasse dynamisch hinzufügen möchte
((dynamic)this).Whatever = 10; 

Es wäre viel schöner, wenn ich

Whatever = 10; 

tun kann ich nur ein paar Sachen bin Spick so dass ich einen wirklichen Zusammenhang dies nicht hinzufügen kann, und nein, Ruby ist nicht die Lösung dieses Mal;)

Ich könnte es in eine Eigenschaft wickeln, aber es würde die API der Funktionalität si hinzufügen nce würde ich tun müssen

Property.Whatever = 10; 
+2

Nein, es ist unmöglich. –

+0

Sie können die Frage hier http://stackoverflow.com/questions/1502276/c-4-0-dynamic-this-pointer sehen. –

Antwort

0

Wäre es nicht einfacher, sie nur als nicht dynamische Attribute hinzuzufügen? Wenn Sie "this" innerhalb Ihrer Klasse verwenden, sind Sie sicher, dass diese Attribute bereits vorhanden sein müssen, nein?

Ich weiß nicht viel über dynamische Klassen obwohl so korrigieren Sie mich, wenn ich falsch liege!

+0

Eigentlich nein. Dies ist eine Basisklasse, und ich möchte Mitglieder zu Erben der Klasse dynamisch hinzufügen und anschließend die Implementierer zur Laufzeit überprüfen, wenn sie bestimmte Methoden bereitstellen. Ich weiß, es klingt verrückt, aber es gibt einen Punkt + es ist nur ein Beweis für das Konzept Spike :) – TheCodeJunkie

4

Warum nicht einfach die Basisklasse erweitern?

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

Oder Sie könnten einfach zu VB.NET mit Option Strict Off oder was auch immer wechseln die Einstellung ;-)

+0

Das würde erfordern, dass die Anrufung selbst sein. Was auch immer? – TheCodeJunkie

+0

Nevermind .. Ich habe Ihren Code als Überschreibung einer Eigen-Eigenschaft auf DynamicObject gelesen, was nicht der Fall ist. Ja, das ist die gleiche Lösung, die ich mit Property gesagt habe – TheCodeJunkie

1

ist Es ist nicht möglich. Ihr Ansatz mit dem Property.Whatever ist der Weg zu gehen.