运算符重载
使用 operator
关键字来声明运算符。 运算符声明必须符合以下规则:
- 同时包含
public
和static
修饰符。 - 一元运算符有一个输入参数,二元运算符有两个输入参数。 在每种情况下,都至少有一个参数必须具有类型
T
或T?
,其中T
是包含运算符声明的类型,也就是在这个类型的参数里面定义了运算符
注意:
比较运算符必须成对重载。 也就是说,如果重载一对运算符中的任一一个,则另一个运算符也必须重载。 此类配对如下所示:
==
和!=
运算符<
和>
运算符<=
和>=
运算符
比如:
class myclass:MonoBehaviour
{
private int value;//声明value私有字段
public int Value//声明只读属性
{
get { return value; }
}
//声明运算符,重载的运算符是*,二元运算符,所以需要两个参数,且参数中至少有一个包含运算符重载
//也就是在myclass类里面重载了运算符,返回值的int类型
public static int operator *(myclass a, myclass b)
{
int s = a.value * b.value;
return s;
}
public myclass(int value)//构造函数
{
this.value = value;
}
//原来运算符的功能不受影响
public int sss()
{
return 3 * 4;
}
}
用户自定义转换运算符
operator
和 implicit
或 explicit
关键字分别用于定义隐式转换或显式转换。 转换的类型必须是该转换的源类型或目标类型。 可用两种类型中的任何一种类型来定义两种用户定义类型之间的转换。
比如:
class myclass:MonoBehaviour
{
private int value;//声明value私有字段
public int Value//声明只读属性
{
get { return value; }
}
public myclass(int value)//构造函数
{
this.value = value;
}
//使用operator explicit implicit 关键字显式/隐式转换两种类型,返回值是int、myclass类型
public static explicit operator int(myclass mc)//显示声明的myclass转int类处理方法
{
return mc.value;
}
public static implicit operator myclass(int value)//隐式声明的int转myclass类处理方法
{
return new myclass(value);
}
public static implicit operator string(myclass mc)//隐式声明的myclass转string类处理方法
{
return ("定义的myclass类string类型转化结果");
}
}
void Start()
{
int num = (int)new myclass(4);
myclass s = 7;
Debug.Log(num+" "+s.Value);//输出 4 7
}