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!