在F#模块中定义的两种类型,但只有一种在C#中可见

时间:2016-10-01 03:03:43

标签: c# f# type-providers

我有一个F#库,我定义了一个模块。模块内部定义了两种类型。我正在从C#项目访问该库(目前它只是一个测试项目,尽管可能并不重要)。

我可以从C#访问其中一种类型,但另一种类型不可用。

在我的F#代码下面:

module Stock

open FSharp.Data
open InstrumentQueryBuilder

type Stock = CsvProvider<"..\prototype_historical_data.csv">

type StockData(symbol) = 
    member this.Symbol = symbol
    member private this.QueryBuilder = new InstrumentQueryBuilder(this.Symbol)
    member this.LoadData() =
        this.QueryBuilder.HistoricalData() |> Stock.Load
    // more member definitions here...

从C#我可以看到StockData但不是Stock。来自FSharp.Data的StockCsvProvider。在我的C#代码中,我引用了FSharp.Data和FSharp.Core。

在C#中使用StockData就像这样简单:

var stockData = new Stock.StockData("SPY");

但如果我对Stock执行相同操作,则会显示编译时错误。是否有任何建议如何访问Stock类型或解释为什么不可能?

1 个答案:

答案 0 :(得分:2)

在F#中,type对它有很多意义,即使它们看起来非常相似。

在你的情况下,

股票 - 类型缩写(别名)。 第一类对象。这就是为什么c#不可见。

StockData - 它是类。在名称后面有函数式参数列表用作构造函数。