gpt4 book ai didi

c# - 运算符在其他类中重载

转载 作者:行者123 更新时间:2023-11-30 15:46:57 24 4
gpt4 key购买 nike

我可以在 C# 中为 B 类中的 A 类重载运算符吗?例如:

class A
{
}

class B
{
public static A operator+(A x, A y)
{
...
}
}

最佳答案

没有;其中一个参数必须是包含类型。

来自语言规范(4.0 版)的第 10.10.2 节:

The following rules apply to binary operator declarations, where T denotes the instance type of the class or struct that contains the operator declaration:

• A binary non-shift operator must take two parameters, at least one of which must have type T or T?, and can return any type.

你应该想想为什么。这是一个原因。

class A { }
class B { public static A operator+(A first, A second) { // ... } }
class C { public static A operator+(A first, A second) { // ... } }

A first;
A second;
A result = first + second; // which + ???

还有一个:

class A { public static int operator+(int first, int second) { // ... } } 

暂时假设这是允许的。

int first = 17;
int second = 42;
int result = first + second;

根据运算符重载决议规范 (§7.3.2),A.+ 将优先于 Int32.+。我们刚刚为 int 重新定义了加法!讨厌。

关于c# - 运算符在其他类中重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3981911/

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