我是c#和Windows编程的新手。我知道在c#中,有一个叫做运算符重载的很棒的功能。我想在我的代码中应用这种技术。在下面的代码中,我想定义二进制+
运算符,以便我可以连接两个PointF
对象。
在pointList.Add(point + center)
行中,我收到了错误消息:
错误1运营商' +'不能应用于类型的操作数 ' System.Drawing.PointF'和 ' System.Drawing.PointF'
我不确定为什么会出现此错误,因为我已经为PointF重载了operator +。
private static PointF operator+ (PointF point_left, PointF point_right) {
return new PointF(point_left.X + point_right.X, point_left.Y + point_right.Y);
}
private void Form1_Paint(object sender, PaintEventArgs e) {
List<PointF> pointList = new List<PointF>();
PointF center = new PointF(50, 50);
int radius = 50;
for (int i = 0; i < 5; ++i) {
double degree = (2.0 * Math.PI * i) / 5.0;
PointF point = new PointF((float)(radius * Math.Cos(degree)), (float)(radius * Math.Sin(degree)));
pointList.Add(point + center);
}
Brush brush = new LinearGradientBrush(new Point(20, 20), new Point(50, 50),
Color.Red, Color.Blue);
e.Graphics.FillPolygon(brush, pointList.ToArray());
}
编辑:在我重新编译代码后,我得到了一个不同的错误:
二元运算符的一个参数必须是包含类型
我真的想要为+
重载PointF
运算符。有什么工作吗?在c ++中,可以通过使用全局函数为不同的类重载运算符。如何实现c#?
答案 0 :(得分:1)
您无法扩展内置结构和类来添加运算符。
或者,您可以创建一个扩展方法来完成工作:
public static class ExtensionMethods
{
public static PointF Add(this PointF operand1, PointF operand2)
{
return new PointF(operand1.X + operand2.X, operand1.Y + operand2.Y);
}
}
用法是:
var p1 = new PointF(1, 1);
var p2 = new PointF(2, 2);
reult =p1.Add(p2);
答案 1 :(得分:0)
根据C#net/context,您必须将运算符重载声明为public static
。这可能是你在这里问题的原因,虽然如果没有错误我也会感到惊讶。