L'intégration de C #, F #, IronPython et IronRuby
-
24-10-2019 - |
Question
On m'a dit que les fichiers d'assemblage à base de C # et F # la source est interopérable qu'ils sont compilés dans l'assemblage .NET.
- Q1: Est-ce que cela signifie que C # peut appeler F # fonctions comme ils sont C # fonctions
- Q2: Que diriez-vous du IronPython et IronRuby? Je ne vois pas de dll de montage du IronPython / IronRuby.
- Q3: Est-il un moyen facile d'utiliser les fonctions IronPython / IronRuby de C # ou F #
Tout code exemple serait grand.
La solution
1) Oui. En utilisant un exemple simple, en F #, je peux appeler la méthode principale d'une application console C #:
open SampleApp
SampleApp.Program.Main([| "Hello"; "World" |])
2) Pour le DLR, je pense que les choses sont un autre bit. Je crois que c'est la façon dont vous allez exécuter Python (par exemple);
ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
Ma syntaxe peut être un peu hors -. Mais vous devriez être en mesure d'obtenir l'essentiel
3) Vous devez télécharger des DLL DLR spéciales - puis les référencer dans votre application C # / F # pour être interopérables. Ils devraient être disponibles à partir du site Microsoft DLR.
Autres conseils
On m'a dit que les fichiers d'assemblage fabriqué à partir de C # et F # source interopérables comme ils sont compilés dans l'assemblage .NET.
Oui, vous pouvez faire référence à un assemblage # F dans un C #. F # objets etc fonctionnera comme C # les lorsque vous les faites référence.
Vous pouvez accéder au code IronPython / Ruby en C # aussi, bien que ce soit un peu différent de référencement juste un assemblage. Voici un exemple:
http://www.highoncoding.com/Articles/573_First_Look_at_the_IronRuby.aspx
Q3: Est-il un moyen facile d'utiliser les fonctions IronPython / IronRuby de C # ou F #
Vous pouvez jeter un oeil à Embedding IronPython dans une application C #
En fait, ce qu'il fait (code simplifié):
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"));