C#使用operator关键字实现操作符重载
2010-04-28 16:17
543 查看
使用operator关键字实现操作符重载
C#中,操作符都是一些静态方法,其返回值表示操作结果,其参数是操作数.当我们为一个类创建操作符时,我们称为"重载(OverLoad)"该操作符,与成员方法重载很像.要重载加法操作符(+),应这样写:
public static Fraction operator+(Fraction lhs,Fraction rhs);
将参数取名为lhs和rhs是我的习惯,参数名lhs代表"lefthand side"(左手边),这样可以提醒我第一参数代表操作的左边.类似的,rhs代表"righthand side"(右手边).
C#的操作符号重载语法是在要重载的操作符后写上关键字operator.该关键字是一个方法修饰符.因此要重载加法操作符(+),应写成operator+.
C#可以隐式地将int转换long,并允许显式地将long转换为int.int到long是隐式转换,因为任何int都可以适应long的内存表示.而逆操作,从long到int,必须是显式的(要用强制转换操作符),因为转换可能使信息丢失:
int myInt = 5;
long myLong;
myLong = myInt; //隐式
myInt = (int) myLong; //显式
对分数可能也需要相同的功能.对于给定的int,可以支持隐式的转换为分数,因为整数值等于值除以1(如 15= =15/1).
对于给定分数,可以提供显式转换为整数,只要允许值可以取整.因此,9/4可以转换为整数值2.
提示:关键字implicit用于转换肯定成功,不会丢失信息的时候;否则就用explicit.
public static implicit operator Fraction(int theInt){
return new Fraction(theInt);
}
public static explicit operator int(Fraction theFraction){
return theFraction.numerator/theFraction.denominator;
}
转换操作符号后是等于操作符(==)和不等于操作符(!=).请记住,如果实现了其中一个,必须实现另一个.
public static bool operator ==(Fraction lhs,Fraction rhs){
Console.WriteLine("In operator ==");
if (lhs.denominator == rhs.denominator && lhs.numerator == rhs.numerator)
return true;
return false;
}
public static bool operator !=(Fraction lsh,Fraction rhs){
Console.WriteLine("In operator !=");
return !(lhs == rhs);
}
C#中,操作符都是一些静态方法,其返回值表示操作结果,其参数是操作数.当我们为一个类创建操作符时,我们称为"重载(OverLoad)"该操作符,与成员方法重载很像.要重载加法操作符(+),应这样写:
public static Fraction operator+(Fraction lhs,Fraction rhs);
将参数取名为lhs和rhs是我的习惯,参数名lhs代表"lefthand side"(左手边),这样可以提醒我第一参数代表操作的左边.类似的,rhs代表"righthand side"(右手边).
C#的操作符号重载语法是在要重载的操作符后写上关键字operator.该关键字是一个方法修饰符.因此要重载加法操作符(+),应写成operator+.
C#可以隐式地将int转换long,并允许显式地将long转换为int.int到long是隐式转换,因为任何int都可以适应long的内存表示.而逆操作,从long到int,必须是显式的(要用强制转换操作符),因为转换可能使信息丢失:
int myInt = 5;
long myLong;
myLong = myInt; //隐式
myInt = (int) myLong; //显式
对分数可能也需要相同的功能.对于给定的int,可以支持隐式的转换为分数,因为整数值等于值除以1(如 15= =15/1).
对于给定分数,可以提供显式转换为整数,只要允许值可以取整.因此,9/4可以转换为整数值2.
提示:关键字implicit用于转换肯定成功,不会丢失信息的时候;否则就用explicit.
public static implicit operator Fraction(int theInt){
return new Fraction(theInt);
}
public static explicit operator int(Fraction theFraction){
return theFraction.numerator/theFraction.denominator;
}
转换操作符号后是等于操作符(==)和不等于操作符(!=).请记住,如果实现了其中一个,必须实现另一个.
public static bool operator ==(Fraction lhs,Fraction rhs){
Console.WriteLine("In operator ==");
if (lhs.denominator == rhs.denominator && lhs.numerator == rhs.numerator)
return true;
return false;
}
public static bool operator !=(Fraction lsh,Fraction rhs){
Console.WriteLine("In operator !=");
return !(lhs == rhs);
}
相关文章推荐
- c#实现算术运算符的重载(关键字operator)
- c#实现逻辑运算符的重载(关键字operator)
- C# - 使用operator关键字实现操作符重载
- 如何:使用 C++ 实现 C# 的 is 和 as 关键字
- 重载数组下标操作符,使用operator
- C#使用yield关键字让自定义集合实现foreach遍历的方法
- 使用未公开关键字在 C# 中导入外部 printf 等参数数量可变函数 [2] C# 实现
- C#2.0中使用yield关键字简化枚举器的实现
- c#实现隐式的用户自定义类型转换(关键字implicit operator)
- 使用未公开关键字在 C# 中导入外部 printf 等参数数量可变函数 [2] C# 实现
- C# 使用重载消息处理函数的方式,实现没有标题栏的窗体的拖动。
- MFC中使用自定义CObject派生类重载“=”“==”操作符 error C2248: “CObject::operator =” error C2678: 二进制“==”
- C#使用yield关键字让自定义集合实现foreach遍历的方法
- 重载数组下标操作符,使用operator
- C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理
- 使用C#实现P2P应用程序(附原码) 分享
- 使用C#实现WinForm窗体的动画效果
- 蛙蛙推荐:c#使用winsock api实现同步Socket服务端
- C#使用虚拟方法实现多态
- C#中使用位运算来实现权限管理