Integration von C#, F#, Ironpython und IronRuby
-
24-10-2019 - |
Frage
Mir wurde mitgeteilt, dass die aus C# und F# Quelle erstellten Montagedateien interoperabel sind, wenn sie in .NET -Assembly zusammengestellt werden.
- F1: Bedeutet das, dass C# F# Funktionen aufrufen kann, so wie sie C# -Funktionen sind?
- F2: Wie wäre es mit Ironpython und IronRuby? Ich sehe keine Montage -DLL aus dem Ironpython/IronRuby.
- F3: Gibt es eine einfache Möglichkeit, Ironpython/IronRuby -Funktionen aus C# oder F# zu verwenden?
Jeder Beispielcode wäre großartig.
Lösung
1) Ja. Mit einem einfachen Beispiel kann ich in F# die Hauptmethode einer C# Konsolen -App aufrufen:
open SampleApp
SampleApp.Program.Main([| "Hello"; "World" |])
2) Für die DLR denke ich, dass die Dinge etwas anders sind. Ich glaube, so würden Sie Python ausführen (zum Beispiel);
ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
Meine Syntax mag ein bisschen weg sein - aber Sie sollten in der Lage sein, das Kern zu bekommen.
3) Sie müssen einige spezielle DLR -DLLs herunterladen - und dann in Ihrer C# / f# -Anwendung verweisen, um interoperabel zu sein. Sie sollten auf der Microsoft DLR -Website erhältlich sein.
Andere Tipps
Mir wurde mitgeteilt, dass die aus C# und F# Quelle erstellten Montagedateien interoperabel sind, wenn sie in .NET -Assembly zusammengestellt werden.
Ja, Sie können auf eine F# -Anbaugruppe in einem C# 1 verweisen. Die F# Objekte usw. funktionieren wie C#, wenn Sie sie verweisen.
Sie können auch in C# auf Ironpython/Ruby Code zugreifen, obwohl er sich ein wenig anders unterscheidet als nur auf eine Baugruppe. Hier ist ein Beispiel:
http://www.highoncoding.com/articles/573_first_look_at_the_ironruby.aspx
F3: Gibt es eine einfache Möglichkeit, Ironpython/IronRuby -Funktionen aus C# oder F# zu verwenden?
Sie könnten sich ansehen Einbetten von Ironpython in eine C# -Anwendung einbetten
Grundsätzlich was es tut (vereinfachter Code):
var engine = Python.CreateEngine();
var scriptSource = engine.CreateScriptSourceFromString(@"
def foo(s):
print s", SourceCodeKind.Statements);
var scope = engine.CreateScope();
scriptSource.Execute(scope);
//Get a reference to the function
Func<string, decimal> foo = scope.GetVariable<Func<string, decimal>>("foo");
//Execute it
Console.WriteLine(foo("a"));