在 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
.
的构造函数调用中
我有一个自定义 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
.