可以!!!
原来编译器可以自动识别前缀和后缀形式,只要重载一次就可以了
具体原理是什么,就不知道了,望高手赐教!public class PointTest
{
public static void Main()
{
Point MyPoint = new Point();
MyPoint.X = 100;
MyPoint.Y = 200;
System.Console.WriteLine(MyPoint.X);
System.Console.WriteLine(MyPoint.Y);
Point NewPoint;
// 编译器自动识别前缀和后缀形式
// 后缀形式
NewPoint = MyPoint++;
System.Console.WriteLine(MyPoint.X);
System.Console.WriteLine(MyPoint.Y);
System.Console.WriteLine(NewPoint.X);
System.Console.WriteLine(NewPoint.Y);
// 前缀形式
NewPoint = ++MyPoint;
System.Console.WriteLine(MyPoint.X);
System.Console.WriteLine(MyPoint.Y);
System.Console.WriteLine(NewPoint.X);
System.Console.WriteLine(NewPoint.Y);
}
}class Point
{
public int X;
public int Y;
public static Point operator ++ (Point RValue)
{
Point NewPoint = new Point();
NewPoint.X = RValue.X + 1; // 注意:不能用RValue.X++或++RValue.X的形式
NewPoint.Y = RValue.Y + 1;
return NewPoint;
}
}
原来编译器可以自动识别前缀和后缀形式,只要重载一次就可以了
具体原理是什么,就不知道了,望高手赐教!public class PointTest
{
public static void Main()
{
Point MyPoint = new Point();
MyPoint.X = 100;
MyPoint.Y = 200;
System.Console.WriteLine(MyPoint.X);
System.Console.WriteLine(MyPoint.Y);
Point NewPoint;
// 编译器自动识别前缀和后缀形式
// 后缀形式
NewPoint = MyPoint++;
System.Console.WriteLine(MyPoint.X);
System.Console.WriteLine(MyPoint.Y);
System.Console.WriteLine(NewPoint.X);
System.Console.WriteLine(NewPoint.Y);
// 前缀形式
NewPoint = ++MyPoint;
System.Console.WriteLine(MyPoint.X);
System.Console.WriteLine(MyPoint.Y);
System.Console.WriteLine(NewPoint.X);
System.Console.WriteLine(NewPoint.Y);
}
}class Point
{
public int X;
public int Y;
public static Point operator ++ (Point RValue)
{
Point NewPoint = new Point();
NewPoint.X = RValue.X + 1; // 注意:不能用RValue.X++或++RValue.X的形式
NewPoint.Y = RValue.Y + 1;
return NewPoint;
}
}
在你重载了++操作符以后,C#编译器回用以下方式调用:Point pt = ...;
//pt ++; 等同于
Point temp = pt;
pt = Point.operator ++(pt);
return temp;// ++ pt; 等同于
pt = Point.operator ++(pt);
return pt;