我刚刚看到它在最近的一个答案中使用:
public static implicit operator bool(Savepoint sp) { return sp != null; }
为什么我们在这里需要隐含的词,这是什么意思?
隐式意味着转换不需要在代码中使用强制转换.
你现在可以这样做:
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
这看起来像是误用了隐式运算符.我不知道Savepoint类的功能,但将其转换为布尔值似乎不合逻辑.隐式运算符使您可以通过简单地评估引用来检查Savepoint引用是否为null:
if (point) {
代替:
if (point != null) {
如果它以这种方式使用,那就是隐藏了代码实际正在做的事情,这几乎与C#所涉及的内容相悖.