19 c# implicit-cast implicit-conversion
我刚刚看到它在最近的一个答案中使用:
public static implicit operator bool(Savepoint sp)
{
return sp != null;
}
Run Code Online (Sandbox Code Playgroud)
为什么我们在这里需要隐含的词,这是什么意思?
mqp*_*mqp 29
隐式意味着转换不需要在代码中使用强制转换.
你现在可以这样做:
Savepoint point = new Savepoint();
if(point) // becomes a bool using your operator
{
}
Run Code Online (Sandbox Code Playgroud)
而不是必须这样做:
Savepoint point = new Savepoint();
if((bool)point) // an "explicit" conversion
{
}
Run Code Online (Sandbox Code Playgroud)
为什么这是一个有用的区别的一个例子是数字类型.存在从"较小"类型到"较大"类型的隐式转换,例如:
float f = 6.5;
double d = f; // implicit conversion
Run Code Online (Sandbox Code Playgroud)
但是将较大的类型转换为较小的类型可能是危险的,因此只有显式的转换,迫使用户澄清他真的打算执行有问题的操作:
long l = 20;
// short s = l;
short s = (short)l; // explicit conversion
Run Code Online (Sandbox Code Playgroud)
这看起来像是误用了隐式运算符.我不知道Savepoint类的功能,但将其转换为布尔值似乎不合逻辑.隐式运算符使您可以通过简单地评估引用来检查Savepoint引用是否为null:
if (point) {
Run Code Online (Sandbox Code Playgroud)
代替:
if (point != null) {
Run Code Online (Sandbox Code Playgroud)
如果它以这种方式使用,那就是隐藏了代码实际正在做的事情,这几乎与C#所涉及的内容相悖.
| 归档时间: |
|
| 查看次数: |
3210 次 |
| 最近记录: |