Unity3D C#语法之==和!=运算符重载

前言

在编码中,为了提高代码的可读性,我们常常会去重载运算符以封装一些运算,良好的运算符重载,能够极大的提高代码的可读性。本文会讲==以及!=运算符重载。

重载函数

在C#中,重载的时候需要使用operator关键词来声明:

public static bool operator 运算符(object1 左对象, object 右对象){}

双目运算符在填写参数的时候需要输入两个参数,第一个参数为运算符的做参数,第二个为运算符的右参数,最后返回值为运算符的自定义结果。
这里讲重载运算符只讲==与!=,因为这两个运算符是成对出现,类似的还有<和>符号。

public struct TempStruct
{
    public int x = 10;
    public static bool operator ==(TempStruct a,TempStruct b)
    {
        if(a.x == b.x)
        {
            return true;
        }
        return false;
    }
}
public static bool operator!=(TempStruct a,TempStruct b)
{
    return !(a == b);//直接通过使用==的逻辑,避免写重复代码
}

这里在处理!=的时候,可以直接使用==的逻辑可以简化代码。同样的处理也可以放置在处理<和>的重载中。

之后我们在做两个结构体的比较的时候,就只需要使用如下代码,就能比较他们值得大小。

TempStruct a,b;
if(a == b){}

升级处理

你以为这样就完了?

对于==和!=的重载,如果输入为空的情况,那么上面的判断就会报错。那么最简答的修改,就是在函数中添加空判断:

public struct TempStruct
{
    public int x = 10;
    public static bool operator ==(TempStruct a,TempStruct b)
    {
        if(a == null)//会出现递归调用
        {
            if(b == null) return truel
            return false;
        }
        if(a.x == b.x)
        {
            return true;
        }
        return false;
    }
}
public static bool operator!=(TempStruct a,TempStruct b)
{
    return !(a == b);//直接通过使用==的逻辑,避免写重复代码
}

这么写是很快,同时还考虑到了两个空对象的情况,但是这样会陷入死循环,因为在做空判断的时候出现了递归调用。

为了避免这种情况,对空的处理需要换一种方式:

public struct TempStruct
{
    public int x = 10;
    public static bool operator ==(TempStruct a,TempStruct b)
    {
        if(object.Equal(a,null) ||object.Equal(b,null) )//会出现递归调用
        {
            return object.Equal(a,b);
        }
        if(a.x == b.x)
        {
            return true;
        }
        return false;
    }
}
public static bool operator!=(TempStruct a,TempStruct b)
{
    return !(a == b);//直接通过使用==的逻辑,避免写重复代码
}

注意这里对空判断使用了object.Equal(a,b)方法,避免了对重载运算符的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值