我有一个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的Stock
为CsvProvider
。在我的C#代码中,我引用了FSharp.Data和FSharp.Core。
在C#中使用StockData
就像这样简单:
var stockData = new Stock.StockData("SPY");
但如果我对Stock
执行相同操作,则会显示编译时错误。是否有任何建议如何访问Stock
类型或解释为什么不可能?
答案 0 :(得分:2)
在F#中,type
对它有很多意义,即使它们看起来非常相似。
在你的情况下,
股票 - 类型缩写(别名)。 不第一类对象。这就是为什么c#不可见。
StockData - 它是类。在名称后面有函数式参数列表用作构造函数。