C#中的接口可以继承另一个接口,例如
interface IFoo : IComparable { }
另一方面,以下声明是非法的:
interface IBar : struct { } // Invalid syntax
是否有任何方式可以声明接口,以便实现类型被限制为struct
?
答案 0 :(得分:4)
是否有任何方式可以声明接口,以便实现类型被约束为struct?
不,这当前是不可能的,也不是反过来的(确保接口是由类实现的)。
就文档而言,我能找到的最接近的是Interfaces,Interfaces (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) { }
}