给定F#类型:
type Foo() =
member this.Prop with get() = ()
interface IDisposable with
member this.Dispose() = ()
Run Code Online (Sandbox Code Playgroud)
在C#中,我创建了对象,但我无法调用Dispose()
:
var x = new Foo();
x.Dispose(); // compile error, x does not contain a definition of Dispose
Run Code Online (Sandbox Code Playgroud)
但是,我可以写:
((IDisposable)x).Dispose(); // works, but I don't like the cast
Run Code Online (Sandbox Code Playgroud)
有没有办法避免C#中的强制转换?这是关系到道路F#并不会自动让你叫.Dispose()
的Foo
类型从F#中?
Jar*_*Par 14
默认情况下,F#中的接口实现是显式的.因此,除非从转换为界面的类型(某种形式的铸造)中看到,否则这些方法是不可见的.
要解决此问题,请公开一个与接口版本具有相同签名的实例方法.然后将接口转发到实例函数.例如
type Foo() =
member this.Prop with get() = ()
member this.Dispose() = ()
interface IDisposable with
member this.Dispose() = this.Dispose()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
746 次 |
最近记录: |