当前位置: 首页 > 编程语言 > C#

在关于等于重写的msdn指南中,为什么在空检查中强制转换为对象?Share

时间:2023-04-10 18:07:53 C#

在msdn指南中关于Equalsoverride,为什么在空检查中强制转换为对象?我刚刚看了msdn上关于重载equals()的指南(见下面的代码);大部分内容对我来说都很清楚,但有一行我不明白。if((System.Object)p==null)或者,在第二个覆盖中if((object)p==null)为什么不简单地if(p==null)什么反对购买我们的演员表?publicoverrideboolEquals(System.Objectobj){//如果参数为null则返回false。如果(obj==null){返回假;}//如果参数不能转换为Point则返回false。TwoDPointp=objasTwoDPoint;如果((System.Object)p==null){返回false;}//如果字段匹配则返回真:return(x==px)&&(y==py);}publicboolEquals(TwoDPointp){//如果参数为nullreturnfalse:if((object)p==null){returnfalse;}//如果字段匹配则返回真:return(x==px)&&(y==py);==运算符可以被覆盖,如果是这样,默认的引用比较可能不是您得到的。强制转换为System.Object可确保调用==执行引用相等性测试。publicstaticbooloperator==(MyObja,MyObjb){//不要这样做!返回真;}...MyObja=newMyObj();我的对象b=null;Console.WriteLine(a==b);//打印trueConsole.WriteLine((object)a==(object)b);//打印false我更喜欢在这种模棱两可的上下文中使用object.ReferenceEquals(a,b)来强制进行引用比较,因为它在精确保留语义的同时明确了意图(事实上,ReferenceEquals就是这样实现的)。我认为,由于这篇文章还讨论了重写运算符==,它强制它使用在Object上定义的==运算符,而不是当前类中的任何重载运算符。以上是C#学习教程:msdn指南中关于Equalsoverride,whycasttoobjectinnullcheck?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: