Joe*_*nos 18 c# boolean overloading operator-keyword
我一直在阅读有关在C#中重载true和false的内容,我想我理解这与定义bool运算符之间的基本区别.我看到的例子是这样的:
public static bool operator true(Foo foo) {
return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
return (foo.PropA <= 0);
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这与说:
public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
Run Code Online (Sandbox Code Playgroud)
据我所知,区别在于,通过分别定义true和false,您可以拥有一个既是真又假的对象,或者既不是真也不是假:
public static bool operator true(Foo foo) { return true; }
public static bool operator false(Foo foo) { return true; }
//or
public static bool operator true(Foo foo) { return false; }
public static bool operator false(Foo foo) { return false; }
Run Code Online (Sandbox Code Playgroud)
我确信这是允许的原因,但我想不出它是什么.对我而言,如果您希望将对象转换为true或false,则单个bool运算符最有意义.
任何人都可以给我一个场景,以另一种方式做到这一点吗?
谢谢
我不知道这些运营商是否存在.这意味着你可以实现自我否定悖论:
public class ThisClassIsFalse
{
public static bool operator true(ThisClassIsFalse statement)
{
return statement ? false : true;
}
public static bool operator false(ThisClassIsFalse statement)
{
return statement ? true : false;
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在我们知道这个经典悖论的真正解决方案...... StackOverflowException.
| 归档时间: |
|
| 查看次数: |
6406 次 |
| 最近记录: |