Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#、F#、IronPython和IronRuby的集成_C#_.net_F#_Ironpython_Ironruby - Fatal编程技术网

C#、F#、IronPython和IronRuby的集成

C#、F#、IronPython和IronRuby的集成,c#,.net,f#,ironpython,ironruby,C#,.net,F#,Ironpython,Ironruby,我被告知,由C#和F#源代码生成的程序集文件在编译到.NET程序集中时是可互操作的 问题1:这是否意味着C可以像调用C函数一样调用F函数 问题2:IronPython和IronRuby怎么样?我没有从IronPython/IronRuby中看到任何程序集dll 问题3:有什么简单的方法可以从C#或F#使用IronPython/IronRuby函数吗 任何示例代码都会很好 有人告诉我,汇编文件 由C和F制成。来源是 可在编译时进行互操作 进入.NET程序集 是的,您可以在C#one中引用F#a

我被告知,由C#和F#源代码生成的程序集文件在编译到.NET程序集中时是可互操作的

  • 问题1:这是否意味着C可以像调用C函数一样调用F函数
  • 问题2:IronPython和IronRuby怎么样?我没有从IronPython/IronRuby中看到任何程序集dll
  • 问题3:有什么简单的方法可以从C#或F#使用IronPython/IronRuby函数吗
任何示例代码都会很好

有人告诉我,汇编文件 由C和F制成。来源是 可在编译时进行互操作 进入.NET程序集

是的,您可以在C#one中引用F#assembly。当您引用F#对象等时,它们的功能将与C#对象类似

您也可以访问C#中的IronPython/Ruby代码,尽管它与仅引用程序集略有不同。以下是一个例子:

是的。通过一个简单的例子,在F#中,我可以调用C#控制台应用程序的main方法:

open SampleApp

SampleApp.Program.Main([| "Hello"; "World" |])
2) 对于DLR,我认为情况有点不同。我相信这就是执行Python的方式(例如)

我的语法可能有点不对劲,但你应该能够理解要点

3) 您需要下载一些特殊的DLR DLL,然后在C#/F#应用程序中引用它们,以实现互操作。它们应该可以从Microsoft DLR站点获得

问题3:有什么简单的方法可以从C#或F#使用IronPython/IronRuby函数吗

你可以看看

基本上,它的作用(简化代码):

var-engine=Python.CreateEngine();
var scriptSource=engine.CreateScriptSourceFromString(@)
食物环境徖生署:
打印“s”,SourceCodeKind.Statements);
var scope=engine.CreateScope();
scriptSource.Execute(范围);
//获取对函数的引用
Func foo=scope.GetVariable(“foo”);
//执行它
控制台写入线(foo(“a”);
ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptFromSourceFile("myPythonScript.py");
ScriptScope scope = engine.CreateScope();

script.Execute(scope);
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"));