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.

War es hilfreich?

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"));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top