Aar*_*ker 4 c# f# interface c#-to-f#
我正在重新编写从F#到C#的一些东西,并遇到了一个问题.
在F#示例中我有这样的事情:
let foo (x:'T) =
// stuff
{ new TestUtil.ITest<'T[], 'T[]> with
member this.Name input iters = "asdfs"
member this.Run input iters = run input iters
interface IDisposable with member this.Dispose() = () }
Run Code Online (Sandbox Code Playgroud)
现在在我的C#版本中我有..
public class Derp
{
// stuff
public TestUtil.ITest<T, T> Foo<T>(T x)
{
// ???
// TestUtil.ITest is from an F# library
}
}
Run Code Online (Sandbox Code Playgroud)
如何在C#中重新创建F#功能?如果没有在C#中完全重新定义ITest界面,有没有办法做到这一点?
C#不支持定义这样的接口的匿名实现.或者,您可以声明一些内部类并返回它.例:
public class Derp
{
class Test<T> : TestUtil.ITest<T, T>
{
public string Name(T[] input, T[] iters)
{
return "asdf";
}
public void Run(T[] input, T[] iters)
{
run(input, iters);
}
public void Dispose() {}
}
public TestUtil.ITest<T, T> Foo<T>(T x)
{
//stuff
return new Test<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我不确定我的F#代码是否正确获得了类型,但这应该是一般的想法.