你如何在f#中声明和使用标记接口?

时间:2009-01-04 21:30:20

标签: f#

你如何在F#中复制它?

interface IMarker
{
    // No members here
}

class MyClass : IMarker
{
// can contain code
}

更新: 以下代码确实定义了标记接口,但到目前为止,没有一个答案设法生成实现此标记接口的producde类(参见上面的MyClass)

type IMarker = interface     end

4 个答案:

答案 0 :(得分:15)

一个老问题,但这个特殊情况所需的语法(F#2.0)实际上是:

type IMarker = interface end

type Marker =
  class
    interface IMarker
  end

或者(包括Marker的构造函数):

type IMarker = interface end

type Marker() =
    interface IMarker

刚写

type Marker =
  interface IMarker

是不可能的,因为它看起来像你想要创建一个新的接口类型。

答案 1 :(得分:10)

type IMarker = interface     end
type MyClass = interface IMarker

(更新)

F#总是隐式定义接口,你需要强制转换为接口才能使用它。

Why F# interface differs greatly from C#

答案 2 :(得分:4)

为了得到一个空类型,我相信你将不得不恢复到非光的语法(接口......结束)。

#light

type IMarker = 
    interface
    end

type Marker =
    interface IMarker

答案 3 :(得分:-1)

离开我的头顶(不启动Visual Studio):

type IMarker ;

type MyClass =
  interface IMarker