我有以下的代码,它按预期工作:
然而,如果我将“double”替换为“Complex”,则会出现编译错误:
解决方法并不复杂--我可以将这行代码替换为以下内容:
为什么我的DoubleWrapper类可以构建,但是我的ComplexWrapper不能?
using System;
namespace Whatever {
public class DoubleWrapper {
public double Payload { get; set; }
public DoubleWrapper(double payload) {
this.Payload = payload;
}
public static implicit operator DoubleWrapper(double x) {
DoubleWrapper r = new DoubleWrapper(x);
return r;
}
public static implicit operator double(DoubleWrapper wrapper) {
double r = wrapper.Payload;
return r;
}
public DoubleWrapper Times(DoubleWrapper multiplyByMe) {
DoubleWrapper r = this * multiplyByMe; // does compile
return r;
}
}
}
然而,如果我将“double”替换为“Complex”,则会出现编译错误:
using System;
using System.Numerics;
namespace Whatever {
public class ComplexWrapper {
public Complex Payload { get; set; }
public ComplexWrapper(Complex payload) {
this.Payload = payload;
}
public static implicit operator ComplexWrapper(Complex x) {
ComplexWrapper r = new ComplexWrapper(x);
return r;
}
public static implicit operator Complex(ComplexWrapper wrapper) {
Complex r = wrapper.Payload;
return r;
}
public ComplexWrapper Times(ComplexWrapper multiplyByMe) {
ComplexWrapper r = this * multiplyByMe; // ERROR: Operator '*' cannot be applied to operands of type Whatever.ComplexWrapper and Whatever.ComplexWrapper.
return r;
}
解决方法并不复杂--我可以将这行代码替换为以下内容:
ComplexWrapper r = this.Payload * multiplyByMe; //WORKS
我已经验证了星号符号对于双精度和System.Numerics.Complex都有效。它确实有效:
namespace SomewhereElse { // different namespace
public static class TestTimes { // builds just fine
public static void Products() {
double x1 = 4;
double x2 = 5;
double product = x1 * x2;
Complex z1 = new Complex(3, 4);
Complex z2 = new Complex(3, -4);
Complex zProduct = z1 * z2;
}
}
}
为什么我的DoubleWrapper类可以构建,但是我的ComplexWrapper不能?