gpt4 book ai didi

C# - 接口(interface)不能包含运算符

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:25 25 4
gpt4 key购买 nike

问题:C# 接口(interface)可以包含运算符吗?

通过搜索,我找到的答案是。例如,C# interface cannot contain operators

但是,在 Andrew Troelsen 的书“Pro C# 5.0 and the .Net 4.5 framework”中,他做出了以下声明

Alas, operator constraints are not supported under the current version of C#. However, it is possible (albeit it requires a bit more work) to achieve the desired effect by defining an interface that supports these operators (C# interfaces can define operators!) and then specifying an interface constraint of the generic class.

粗体字是让我困惑的地方。事实上,当我尝试以下操作时

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

所以这个案子似乎已经解决了。但特罗尔森先生为什么要这样写作呢?我是否遗漏/误解了什么?

谢谢。

最佳答案

要记住的一个关键是,据我所知,与其说接口(interface)不能定义运算符(虽然这是真的),不如说接口(interface)不能定义静态,这令人沮丧,但也是合乎逻辑的。

关于C# - 接口(interface)不能包含运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com