当前位置:  开发笔记 > 编程语言 > 正文

隐式算子

如何解决《隐式算子》经验,为你挑选了2个好方法。

我刚刚看到它在最近的一个答案中使用:

public static implicit operator bool(Savepoint sp)
{
    return sp != null;
}

为什么我们在这里需要隐含的词,这是什么意思?



1> mqp..:

隐式意味着转换不需要在代码中使用强制转换.

你现在可以这样做:

Savepoint point = new Savepoint();
if(point) // becomes a bool using your operator
{
}

而不是必须这样做:

Savepoint point = new Savepoint();
if((bool)point) // an "explicit" conversion
{
}

为什么这是一个有用的区别的一个例子是数字类型.存在从"较小"​​类型到"较大"类型的隐式转换,例如:

float f = 6.5;
double d = f; // implicit conversion

但是将较大的类型转换为较小的类型可能是危险的,因此只有显式的转换,迫使用户澄清他真的打算执行有问题的操作:

long l = 20;
// short s = l;
short s = (short)l;  // explicit conversion



2> Guffa..:

这看起来像是误用了隐式运算符.我不知道Savepoint类的功能,但将其转换为布尔值似乎不合逻辑.隐式运算符使您可以通过简单地评估引用来检查Savepoint引用是否为null:

if (point) {

代替:

if (point != null) {

如果它以这种方式使用,那就是隐藏了代码实际正在做的事情,这几乎与C#所涉及的内容相悖.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有