有人告诉我,由C#和F#源组成的汇编文件可以互操作,因为它们被编译成.NET程序集。
任何示例代码都会很棒。
答案 0 :(得分:5)
1)是的。使用一个简单的例子,在F#中,我可以调用C#控制台应用程序的main方法:
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站点获得。
答案 1 :(得分:3)
我被告知汇编文件 由C#和F#源码制成 在编译时可互操作 进入.NET程序集。
是的,您可以在C#中引用F#程序集。当您引用它们时,F#对象等将起到类似C#的作用。
您也可以在C#中访问IronPython / Ruby代码,尽管它与仅引用程序集略有不同。这是一个例子:
http://www.highoncoding.com/Articles/573_First_Look_at_the_IronRuby.aspx
答案 2 :(得分:2)
问题3:有没有简单的方法可以使用C#或F#中的IronPython / IronRuby函数?
您可以查看Embedding IronPython into a C# application
基本上,它做了什么(简化代码):
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"));