在 C# 中,语言中没有内置的交换性概念。也就是说,如果我定义一个简单的Vector
类,例如:
public struct Vector
{
private readonly double x, y, z;
...
public static Vector operator +(Vector v, double d) {...}
}
我仍然需要定义对称运算符+(double d, Vector v)
,否则表单的任何表达式2.1 * v
都会在动态场景中产生编译错误或在运行时失败。
我的问题是双重的:首先,是否有任何语言可以定义交换运算符而无需定义两种可能的操作数组合?换句话说,是否有任何语言意识到交换性的概念本身?其次,它是否曾经在 C# 中考虑过并被废弃,因为它实际上只是语法糖,以避免一些额外的击键,这些击键并没有真正增加语言的丰富性(并且很可能需要一个额外的保留字)?