首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何重写==运算符

如何重写==运算符
EN

Stack Overflow用户
提问于 2013-12-17 09:11:59
回答 3查看 1.5K关注 0票数 5

如何为类的实例定义操作符==?我试过这样做:

代码语言:javascript
运行
AI代码解释
复制
public bool operator == (Vector anotherVector)
{
    return this.CompareTo(anotherVector) == 1 ;              
}

但上面写着:

期望过载一元运算符

EN

回答 3

Stack Overflow用户

发布于 2013-12-17 09:14:42

您需要将该方法标记为static,还必须实现不相等的!=

代码语言:javascript
运行
AI代码解释
复制
public static bool operator ==(Vector currentVector,Vector anotherVector)
{
    return currentVector.CompareTo(anotherVector) == 1 ;              
}

您必须为两个对象实现==

对于!=

代码语言:javascript
运行
AI代码解释
复制
public static bool operator !=(Vector currentVector,Vector anotherVector)
{
    return !(currentVector.CompareTo(anotherVector) == 1) ;
}

请参阅:重载的指南等于()和操作符== (C#编程指南)

重载的操作符==实现不应引发异常。任何重载操作符==的类型也应该重载操作符!=。

票数 9
EN

Stack Overflow用户

发布于 2013-12-17 09:14:58

C++允许将操作符定义为实例成员函数,以便左操作数成为this指针,与之不同的是,C#操作符重载总是作为静态成员函数进行的。

不可能有this指针,而且两个操作数都是显式参数。

代码语言:javascript
运行
AI代码解释
复制
public static bool operator==(Vector left, Vector right)
{
    return left.CompareTo(right) == 1;              
}

(虽然这在语义上似乎不正确,但通常CompareTo返回零作为等效)

票数 4
EN

Stack Overflow用户

发布于 2013-12-17 09:33:17

我完全同意哈比卜的回答-也同意.只是别忘了处理空子。

代码语言:javascript
运行
AI代码解释
复制
public static bool operator ==(Vector left, Vector right)
        {
            if ((object)left == null)
                return (object)left == null;

            if ((object)right == null)
                return false;

            return ...;
        }

太大了,不能作为他的评论发表。希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20640487

复制
相关文章
ReturnSingleDatabase为True报错
出现这个错误是因为Excel在最初发布的2016版本上加入了更新,而流传的破解包都是最初发布的版本,但好在即使是破解版本我们依然可以更新
但老师
2022/03/22
3580
ReturnSingleDatabase为True报错
怎么在a_bool的值为True的条件拼接a和a_1?
前几天在Python钻石群有个叫【有点意思】的粉丝问了一道关于pandas中字符串拼接问题,如下图所示。
前端皮皮
2022/08/17
6350
怎么在a_bool的值为True的条件拼接a和a_1?
python条件执行
布尔值有真(True)或者假(False)两个。 为了使程序能够根据条件执行不同的语句,通常需要判断一个布尔值。 布尔表达式可以给出布尔值。比如x == y就是一个布尔表达式,它会判断变量x与变量y是否相等。符号==是一个比较运算符,若两个运算对象相等,则返回True;若两者不相等,则返回False。 还可以使用其他的比较运算符: x == y # x等于yx != y # x不等于yx > y # x大于yx < y # x小于y
mwangblog
2018/07/04
9970
关于分段免杀执行的思考
我们在写shellcode时候,做分段免杀执行时,如何做到边解码然后执行再调用解码,解码后再执行?就是分段执行而且解密的密钥是不一样的,对于这个问题,我们应该想想这三个问题。
FB客服
2020/03/17
8080
顺序执行命令,条件执行,管道
顺序执行命令,条件执行 有时候等一条指令执行,时间太久,不妨堆起来一起执行,执行完一条再下一条 每条指令用;隔开就可以啦 sudo apt-get update; sudo apt-get ins
98k
2018/04/12
1.3K0
为啥PHP in_array(0,['a', 'b', 'c']) 返回为true?
但是,直观上看, 0并没有包含在['a', 'b', 'c']数组中,也不会等于'abc'这个字符串。那怎么解释上述的返回结果呢?
架构精进之路
2020/08/17
1.7K0
ReturnSingleDatabase为True报错的解决办法
出现这个错误是因为Excel在最初发布的2016版本上加入了**更新**,而流传的破解包都是最初发布的版本,但好在即使是破解版本我们依然可以更新
但老师
2020/08/02
5930
ReturnSingleDatabase为True报错的解决办法
MCU在执行main之前做了什么?
本文以Arm Cortex-M为例,介绍了在IAR Embedded Workbench中微控制器(MCU)的启动过程。在MCU复位后,程序计数器(PC)会指向相应的复位向量,并开始执行启动代码(startup code)。如果MCU支持浮点单元(FPU),则在启动过程中,首先会调用__iar_init_vfp来初始化FPU,然后继续执行__iar_program_start。接着,__iar_program_start会调用__cmain函数。在__cmain中,会先调用__low_level_init函数,然后调用__iar_data_init3来进行全局和静态变量的初始化。在__iar_data_init3中,首先会调用__iar_zero_init3来初始化初始值为0的全局和静态变量,随后会调用__iar_copy_init3来初始化初始值为非0的全局和静态变量。最终,在启动过程的最后阶段,会通过调用__call_main来跳转到main函数,从而开始执行主程序。
刘盼
2023/08/22
9670
MCU在执行main之前做了什么?
为什么 Java 中1000==1000为false,而100==100为true?
基本知识:我们知道,如果两个引用指向同一个对象,用 == 表示它们是相等的。如果两个引用指向不同的对象,用 == 表示它们是不相等的,即使它们的内容相同。
终码一生
2022/04/14
3630
为什么 Java 中“1000==1000”为false,而”100==100“为true?
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
肉眼品世界
2022/03/29
4750
为什么Java中1000==1000为false而100==100为true?
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
哲洛不闹
2018/09/18
5950
在main方法之前,到底执行了什么?
本人在做接口测试的时候,需要用一个公共类来把所有的执行的代码,然后这个公共类有hsot和hosttype等属性来区分各个测试环境,然后在去不同的地方取用例和请求接口。在给这些属性复制的时候,我是通过不同测试环境新建不同的配置文件,然后执行每个环境的时候让只加载需要测试的环境的配置文件来实现管理测试环境的。中间遇到了一些坑,主要就是对java代码执行循序,特别是在main方法之前的代码执行顺序了解不深入导致的,中间有多个继承关系也有点扰乱了思路。下面分享一下自己这个错误的复现步骤。
FunTester
2019/08/30
7360
如何向女朋友解释int==Integer为true
通常大家对此的解释是,==对于基本类型来说比较的是值,对于引用类型来说比较的是引用,即指向的对象的内存地址。这样解释没错,b==c结果为false毋庸置疑,因为两个都是引用类型。但是为什么a==b(a==c)一个是基本类型一个是引用类型,比较的时候还是值比较呢?
编程大道
2019/07/15
4910
如何向女朋友解释int==Integer为true
为什么Java中1000==1000为false而100==100为true?
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
Leetcode名企之路
2020/09/04
6130
为什么 Java 中“1000==1000”为false,而”100==100“为true?
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
周辰晨
2022/09/20
4920
为什么Java中1000==1000为false而100==100为true?
原文:Why 1000 == 1000 Returns False, but 100 == 100 Returns True in Java? 作者:Bazlur Rahman 译文:http://w
顶级程序员
2018/05/03
7390
为什么 Java 中“1000==1000”为false,而”100==100“为true?
为什么 Java 中“1000==1000”为false,而”100==100“为true? 这是一个挺有意思的讨论话题。
开发者技术前线
2020/11/24
5170
为什么 Java 中“1000==1000”为false,而”100==100“为true?
为什么Java中1000==1000为false而100==100为true?
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
Java后端技术
2018/08/09
5430
点击加载更多

相似问题

如果不是null,则在中为True

14

如果条件为true,则在用户检查完后,取消选中selectBooleanCheckbox

11

如果条件为true,则继续执行while循环。

53

Rails:如果模型属性为true,则在视图中执行以下操作

10

如果条件为true,则使if条件返回;如果为true,则返回while条件

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文