在C#中,假设你有一个简单的类,如:
public class MyFloat
{
public float Value { get; set; }
public MyFloat()
{}
public MyFloat(float _Value)
{
Value = _Value;
}
}
Run Code Online (Sandbox Code Playgroud)
是否存在这样的语法,允许您将其Value属性简写为以下内容:
MyFloat[] Arg_f;
Arg_f = new MyFloat[] { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
而不是需要显式调用构造函数,如:
Arg_f = new MyFloat[] { new MyFloat(1), new MyFloat(2), new MyFloat(3) };
Run Code Online (Sandbox Code Playgroud)
或等效地,即
MyFloat myFloat = 5f; //Implicitly assign 5f to myFloat.Value
float myFloatValue = myFloat; //Implicitly get myFloat.Value
Run Code Online (Sandbox Code Playgroud)
这显然类似于装箱/拆箱,除了我试图"装箱"到特定的对象属性.或者你可能会说我试图通过赋值隐式调用1-arg构造函数.
这样的事情在C#中是可能的,还是我只是在疯狂的追逐?
这可以通过隐式转换实现:
public static implicit operator MyFloat(float f)
{
return new MyFloat(f);
}
Run Code Online (Sandbox Code Playgroud)
现在这将工作:
var myFloats = new MyFloat[] { 1, 2 };
Run Code Online (Sandbox Code Playgroud)
这显然类似于装箱/拆箱,除了我试图"装箱"到特定的对象属性.
这不是关于拳击,它是关于将一种类型转换为另一种类型的能力,隐式地,因为您不希望显式类型声明.
就个人而言,尽管可能,我不喜欢使用隐式转换.它们引起歧义("如何转换为MyFloat?")并且在阅读代码库时可能会让开发人员感到惊讶.
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |