質問

C#およびF#ソースから作成されたアセンブリファイルは、.NETアセンブリにコンパイルされるため、相互運用可能であると言われました。

  • Q1:それは、C#がC#関数と同じようにF#関数を呼び出すことができることを意味しますか?
  • Q2:IronpythonとIronrubyはどうですか? Ironpython/IronrubyからアセンブリDLLは表示されません。
  • Q3:C#またはF#からIronpython/Ironruby機能を使用する簡単な方法はありますか?

どんな例コードでも素晴らしいでしょう。

役に立ちましたか?

解決

1)はい。 F#で簡単な例を使用して、C#コンソールアプリの主な方法を呼び出すことができます。

open SampleApp

SampleApp.Program.Main([| "Hello"; "World" |])

2)DLRの場合、物事は少し違うと思います。これがPythonを実行する方法だと思います(たとえば)。

ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
ScriptScope scope = engine.CreateScope();

script.Execute(scope);

私の構文は少し外れているかもしれませんが、要点を取得できるはずです。

3)いくつかの特別なDLR DLLをダウンロードする必要があります - そして、相互運用可能にするために、C# / F#アプリケーションでそれらを参照してください。 Microsoft DLRサイトから入手できるはずです。

他のヒント

C#およびF#ソースから作成されたアセンブリファイルは、.NETアセンブリにコンパイルされるため、相互運用可能であると言われました。

はい、C#1でF#アセンブリを参照できます。 F#オブジェクトなどは、参照するときにC#のオブジェクトのように機能します。

C#でもIronpython/Rubyコードにアクセスできますが、アセンブリを参照することとは少し異なります。これが例です:

http://www.highoncoding.com/articles/573_first_look_at_the_ironruby.aspx

Q3:C#またはF#からIronpython/Ironruby機能を使用する簡単な方法はありますか?

あなたは見ているかもしれません IronpythonをC#アプリケーションに埋め込みます

基本的に、それがすること(簡素化されたコード):

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"));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top