将接口实现限制为结构?

时间:2017-03-24 12:34:44

标签: c# inheritance struct

C#中的接口可以继承另一个接口,例如

interface IFoo : IComparable { }

另一方面,以下声明是非法的:

interface IBar : struct { } // Invalid syntax

是否有任何方式可以声明接口,以便实现类型被限制为struct

3 个答案:

答案 0 :(得分:4)

  

是否有任何方式可以声明接口,以便实现类型被约束为struct?

不,这当前是不可能的,也不是反过来的(确保接口是由类实现的)。

就文档而言,我能找到的最接近的是InterfacesInterfaces (c#)Inheritance - Interfaces。我怀疑官方MS网站上会有什么东西只是因为(在大多数情况下)没有关于不存在的功能的文档(忽略功能请求或正在进行的功能),这可能被视为非 - 存在的特征。

最近excerpt我找到了

  

类或结构可以实现多个接口。 ...

答案 1 :(得分:2)

实际上,感谢用户@Evk的this精彩评论,我意识到几乎可能将接口的实现限制为struct(或类似地,class)。

接口可以实现为通用接口,其中泛型类型参数被约束为实现接口本身的struct

interface IBar<T> where T : struct, IBar<T> { }

现在我可以声明一个struct来实现IBar

struct BarStruct : IBar<BarStruct> { } // Works fine.

但是,我不能以相同的方式声明实现class的{​​{1}},因为泛型类型参数被限制为IBar:< / p>

struct

然而,这不是一种防水方法:正如用户@Igor在下面的评论中指出的那样,以下内容仍将编译:

class BarClass : IBar<BarClass> { } // Will not compile!

答案 2 :(得分:1)

您不能声明struct的接口,因为类和结构只能实现接口。但是您可以将泛型参数的接口声明为struct:

interface IBar<T> where T : struct
{
    void Foo(T val); // T always be struct
}

并实现此界面:

class Bar : IBar<int>
{
    public void Foo(int val) { }
}