加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将C#接口/类传递给F#

发布时间:2020-12-16 00:10:51 所属栏目:百科 来源:网络整理
导读:我有一个用C#编写的现有项目.我想将其部分业务逻辑移至F#. MyObjectX是一个运行科学算法的C#类. 要运行MyObjectX,需要实现几个接口,以及通过方法(而不是构造函数)注入的一些依赖项.例: public class MyObjectX(): IMathSolver,IBusinessSolver{ //private f
我有一个用C#编写的现有项目.我想将其部分业务逻辑移至F#.
MyObjectX是一个运行科学算法的C#类.
要运行MyObjectX,需要实现几个接口,以及通过方法(而不是构造函数)注入的一些依赖项.例:

public class MyObjectX(): IMathSolver,IBusinessSolver
{
    //private fields
    private int operationMode;
    private ISignalProvider signal;

    //Inject dependcy via method
    public void SetSignalProvider(ISignalProvider signal)
    {
        this.signal = signal;
    }

    //implemention of above interfaces
    public double MethodMathSolver()
    {
        this.signal.GetThreshold();
        //...
    }

    public double Method1BusinessSolver()
    {
    }

    public double Method2MathSolver(IResultProvider provider)
    {
        var x = provider.GetValueAtTime(0.1);
        //...
    }
}

所以现在我想在F#中实现MyObjectX.最好的方法是什么,这样我才能在我的代码中尽可能地发挥作用?

>使现有的C#MyObjectX表现为其余C#类之间的包装/外观,而F#库的算法是在F#模块中实现的.
>编写实现接口的MyObjectX类的F#类,并可能调用其他F#模块.
>或者不是他们.请指教.

另外,将C#的依赖关系传递给F#的最佳方法是什么,如’IResultProvider / ISignalProvider’?我是否需要使用可变变量,这些变量将通过F#中的函数填充依赖项?

请指教.如果你可以分享代码样本,我会很感激.

解决方法

我想你可以在1和2之间做出选择.这些肯定是两种最合理的方法.

我认为选项2可能更好,因为F#实现可以使用最惯用的F#样式(例如将函数作为参数传递)保留在简单的F#模块中.惯用的F#代码并不总是很容易在C#中使用,所以如果你将它包装在一个实现所需C#接口的F#类中,你就会隐藏C#代码中的“F#细节”,这很好.

看一下:

> F# Component Design Guidelines更多关于如何设计F#组件的内容,使其易于使用C#.
> Interfaces (F#)在MSDN上,Interfaces page在F#上获取Fun and Profit,了解有关如何在F#中实际编写此类接口实现的更多详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读