为什么超负荷是true和fals,而不是定义bool运算符? 我一直在阅读有关在C#中超负荷的过载,我想我理解了这与定义Bool操作员之间的基本区别。 我周围看到的示例类似: 公共

问题描述 投票:0回答:3
对我来说,这与说:

public static implicit operator bool(Foo foo) { return (foo.PropA > 0); }
据我所知,差异是,通过单独定义真实和错误,您可以拥有一个既是真实和错误的对象,又不是真实的,也不是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; }

我确定这是有原因的,但是我只是想不到它是什么。 对我来说,如果您希望一个对象能够转换为True或false,则单个布尔操作员最有意义。
有人可以给我一个以相反方式做有意义的情况吗?
thanks

the文档说,超载
true

false

旨在支持(无效)数据库类型(是/否,y/n,0/1等)。

当然,您可以像任何操作员一样不一致地定义它们。您有责任退还明智的东西。编译器不需要两者或两者兼而有之。

我不知道这些操作员存在。 这意味着您可以实施自我束缚悖论:
c# boolean overloading operator-keyword
3个回答
13
投票
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; } }

现在我们知道了这个经典悖论的真正解决方案...stackoverflowException.


我已经看到人们超载了
true

false

超载,以便在Linq存在之前进行巧妙的事情,例如在.NET 2.0中构建表达式。


8
投票
使用他的NHQG项目制定了这样的语法来构建NHIBERNATE标准查询:

return Repository.FindAll( (Where.Publisher.Name == name) && (Where.Publisher.City == city));
    

在系统上进行延长,True可以是任何非零值。 在其他情况下,它可能是任何积极的价值。 其他系统并不是真正的布尔值,并且允许布尔值第三个状态零或nill,这就是为什么您可能会超载真实和错误,而不是超载单个布尔运算符。

2
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.