问题:C#接口可以包含运营商吗?
通过搜索,我找到的答案是没有。 例如,C# interface cannot contain operators
然而,在Andrew Troelsen的书" Pro C#5.0和.Net 4.5框架"他发表以下声明
唉,当前版本的C#不支持运算符约束。但是,这是可能的 (虽然它需要更多的工作)通过定义支持的接口来实现期望的效果 这些运算符( C#接口可以定义运算符!)然后指定的接口约束 泛类。
粗体句是令我困惑的。的确,当我尝试以下
时using System;
interface MathOps<T> where T : class
{
static T operator+(T a, T b);
}
class MyClass : MathOps<MyClass>
{
int x;
public MyClass(int n = 0)
{
x = n;
}
public static MyClass operator+(MyClass a, MyClass b)
{
return new MyClass(a.x + b.x);
}
}
class Program
{
static void Add<T>(ref T a, ref T b) where T : class, MathOps<T>
{
return a + b;
}
static void Main(string[] args)
{
}
}
编译器向我发送了以下内容
error CS0567: Interfaces cannot contain operators
所以案件有点似乎已经解决了。但为什么Troelsen先生会这样写?我错过/误解了什么吗?
感谢。
答案 0 :(得分:0)
要记住的一个关键是,据我所知,并不是说接口不能定义运算符(尽管这是真的)但接口不能定义静态,这既令人沮丧又合乎逻辑。