在 C# 中隐式地为 class 的实例赋值

Assigning a value to an instance of a class in C# implicitly

我有一个自定义 class、ComplexNumber,这是您可能期望的一种表示复数的方法:

class ComplexNumber
{
    double realPart;
    double imaginaryPart;

    public ComplexNumber(double real, double imaginary)
    {
        realPart = real;
        imaginaryPart = imaginary;
    }
}

这个问题的上下文是,如果你想将默认的 C# classes,如双精度或浮点数设置为某个整数值,你可以写

float f = 2;

我希望能够写出类似于

的东西
ComplexNumber c = 2;

这将创建一个 ComplexNumber class 的新变量,其 realPart 设置为 2,其 imaginaryPart 设置为 0.编写 ComplexNumber c = new ComplexNumber(2, 0) 更加乏味,我想知道是否有一种方法可以更隐式地创建自定义 class 的这些实例,就像默认 C# classes 的行为方式一样。

您可以像这样向 class 添加一个 implicit (or expicit) 运算符:

public static implicit operator ComplexNumber(int i) => new ComplexNumber(i, 0);

这样你就可以随心所欲了。

当您将 2 用作文字时,这将是 C# 中的 int,这依赖于 int 可隐式转换为 double 这一事实在 ComplexNumber.

的构造函数调用中