c#“Boxing"通过赋值将其转换为一个属性/ 1参数构造函数
本文关键字:一个 属性 构造函数 参数 转换 quot Boxing 赋值 | 更新日期: 2023-09-27 18:18:31
在c#中,假设您有一个简单的类:
public class MyFloat
{
public float Value { get; set; }
public MyFloat()
{}
public MyFloat(float _Value)
{
Value = _Value;
}
}
是否存在这样一种语法,允许您将其Value属性简单地初始化为:
MyFloat[] Arg_f;
Arg_f = new MyFloat[] { 1, 2, 3 };
不需要显式调用构造函数,如:
Arg_f = new MyFloat[] { new MyFloat(1), new MyFloat(2), new MyFloat(3) };
或等价地,即
MyFloat myFloat = 5f; //Implicitly assign 5f to myFloat.Value
float myFloatValue = myFloat; //Implicitly get myFloat.Value
这显然类似于装箱/拆箱,除了我试图"装箱"到一个特定的对象属性。或者你可能会说,我试图通过赋值隐式调用1个参数的构造函数。
是像这样的东西可能在c#中,还是我只是在徒劳的追逐?
这可以通过隐式转换:
实现public static implicit operator MyFloat(float f)
{
return new MyFloat(f);
}
现在可以运行了:
var myFloats = new MyFloat[] { 1, 2 };
这显然类似于装箱/拆箱,除了我试图"装箱"到一个特定的对象属性。
这不是关于装箱,而是关于隐式地将一种类型转换为另一种类型的能力,因为您不需要显式的类型声明。
就我个人而言,尽管可能,我不喜欢使用隐式转换。它们会导致歧义("如何将其转换为MyFloat
?"),并且可能会使开发人员在阅读代码库时感到惊讶。