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.

Était-ce utile?

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"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top