日期:2014-05-17  浏览次数:20804 次

C#学习笔记——其他

运算符重载

C#运算符被定义为使用预定义类型作为操作数来工作。如果面对一个用户定义类型,运算符完全不知道如何处理它。运算符重载运行定义C#运算符操作自定义类型的操作数。

运算符重载只能用于类和结构。

为类或结构重载一个运算符x,可以声明一个名称为operator x的方法并实现它的行为。

一元运算符的重载方法带一个单独的class或struct类型的参数。

二元运算符的重载方法带两个参数,其中至少有一个必须是class或struct类型。

?

运算符重载方法必须被声明为:

带static和public两个修饰符。

类和结构的成员,该类或结构是它的一个操作数。

?

运算符重载的限制:

可重载的一元运算符:+,-,!,~,++,--,true,false

可重载的二元运算符:+,-,*,/,%,&,|,^,<<,>>,==,!=,>,<,>=,<=

?

递增和递减运算符是可重载的。但和预定义转换不同,重载运算符的前置和后置之前没有区别。

运算符重载不能做如下事情:

创建新运算符。

改变运算符的语法。

重新定义运算符如何让处理预定义类型。

改变运算符的优先级或结合性。

?

例:

?

class LimiterInt{

? ? const int MaxValue=100;

const int MinValue=0;

public static LimiterInt operator -(LimiterInt x)

{

? ?LimiterInt li=new LimiterInt();

li.TheValue=0;

return li;

}

public static LimiterInt operator -(LimiterInt x,LimiterInt y)

{

? ?LimiterInt li=new LimiterInt();

li.TheValue=x.TheValue-y.TheValue;

return li;

}

public static LimiterInt operator +(LimiterInt x,LimiterInt y)

{

? ?LimiterInt li=new LimiterInt();

li.TheValue=x.TheValue+y.TheValue;

return li;

}

?

? ? ? ? private int _TheValue=0;

public int TheValue

{

? ?get{return _TheValue;}

set

{

? ?if(value<MinValue)

? ?_TheValue=0;

else

? ?_TheValue=value>MaxValue?MaxValue:true;

}

}

?

}

?

?

class Program

{

? ? static void main(){

? ? ? ? LimiterInt li1=new LimiterInt();

LimiterInt li2=new LimiterInt();

LimiterInt li3=new LimiterInt();

li1.TheValue=10;li2.TheValue=26;

li3=-li;

Console.WriteLine("-{0}={1}",li1.TheValue,li3.TheValue);

li3=li2-li1;

Console.WriteLine("{0}-{1}={2}",li2.TheValue,li1.TheValue,li3.TheValue);

li3=li2+li1;

Console.WriteLine("{0}+{1}={2}",li2.TheValue,li1.TheValue,li3.TheValue);

? ? }

}


<