Mil*_*oDC 2 f# interactive list sealed
> type XList<'T> (_collection : seq<'T>) =
inherit List<'T> (_collection)
member this.Add _item = if not <| this.Contains _item then base.Add _item
new () = XList<'T> (Seq.empty<'T>);;
inherit List<'T> (_collection)
--------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
stdin(47,9): error FS0945: Cannot inherit a sealed type
Run Code Online (Sandbox Code Playgroud)
我的理解是List <'T>实际上没有密封.没有?
此外,这似乎在F#interactive之外工作得很好.确切的代码在我的F#项目中,编译器处理它而不抱怨.我在几个C#项目中也有同样的事情.代码在每种情况下都按预期工作.
通常,我只是使用静态方法扩展List <'T>(将其作为"F#方式"),但隐藏List.Add也应该正常工作.
正如其他人已经解释的那样,您的代码实际上试图从F#列表类型(已密封)继承.这有点令人困惑,但F#提供了一个ResizeArray<T>代表通用.NET List<T>类型的别名,因此您可以在不使用长名称的情况下解决此问题:
type XList<'T> (_collection : seq<'T>) =
inherit ResizeArray<'T> (_collection)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |