BlackCoin's Corner

In diesem Blog dreht es sich zu 90 % um den Themenbereich C# .Net

C# und das neue Schlüsselwort dynamic

Im letzten Blog-post habe ich, über das neu hinzukommende Schlüsselwort dynamic berichtet.

Nachdem ich von verschiedenen Personen angesprochen wurde, dass Sie sich noch keinen wirklichen Anwendungsfall vorstellen können, habe ich mich Entschlossen, mal ein kleines Beispiel in IronRuby hier niederzuschreiben. (einmal mit und einmal ohne dynamic)

Ich entscheide mich, eine Anwendung Scriptingfähig zu machen, und beschließe die Scripts sollen in IronRuby sein. Nun habe ich also eine Datei wie diese hier und möchte die Methode Calc, in der Klasse Calculator aufrufen.

# Dateiname: source.rb 


class Calculator 
    def Calc 
        21*2 
    end 
end

der für diesen Aufruf nötige C# Code, läßt sich zwar mit und auch ohne dynamic sehr schnell hinschreiben jedoch finde ich, dass es mit dynamic sehr viel einfacher zu lesen ist.

using System; 


namespace ConsoleApplication1 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            var engine = IronRuby.Ruby.CreateEngine(); 
            engine.ExecuteFile("source.rb"); 


            /* Ohne Dynamic würde das ganze so aussehen, und das was zurückgegeben wird ist ein Object */ 
            //object calculator = engine.Execute("Calculator.new"); 
            //Console.WriteLine(engine.Operations.InvokeMember(calculator, "Calc")); 


            /* und hier mit dynamic, zur Laufzeit habe ich als RückgabeTyp ein int und kann es auch behandeln, das heißt alle Eigenschaften von einem int, können ohne einen Cast benutzt werden */


            dynamic calculator = engine.Execute("Calculator.new"); 
            Console.WriteLine(calculator.Calc()); 


            Console.ReadLine(); 
        } 
    } 
}

Das einzige was noch etwas ungewohnt ist, man hat verständlicherweise keine Intelisense!


Posted: Nov 19 2009, 10:23 von Lars Schmitt | mit no comments
Abgelegt unter: ,

Kommentare

Keine Kommentare

Kommentar abgeben

(verpflichtend) 

(verpflichtend) 

(optional)

(verpflichtend)