如何在XNA中向Vector2类添加扩展方法

本文关键字:添加 扩展 方法 Vector2 中向 XNA | 更新日期: 2023-09-27 18:01:12

我正在为XNA中的Vector2类添加一个不错的扩展方法。我想要一个基于输入vector2和float的减法。

这就是我已经做的:

public static class Vector2Extensions
{
    public static Vector2 Subtract(Vector2 v1, float a)
    {
        return new Vector2(v1.X - a, v1.Y - a);
    }
}

然而不知何故,当我想把它称为:

Vector2 x = Vector2.Subtract(new Vector2(2,0), 1.0f);

它似乎没有识别出我对该方法的扩展(第三次重载,因为XNA默认有2次重载(

另一个问题是,为什么我不能重载-运算符?(我就是这样来到这里的(

非常感谢您的帮助。。

如何在XNA中向Vector2类添加扩展方法

要使方法成为扩展方法,需要缺少一件事:第一个参数中的this关键字,如下所示:

public static Vector2 Subtract(this Vector2 v1, float a)

然后您可以在实例上使用该方法:

Vector2 x = new Vector2(2,0).Subtract(1.0f);

或者将其称为静态方法,但来自静态类,而不是"扩展"类本身:

Vector2 x2 = Vector2Extensions.Subtract(new Vector2(2,0), 1.0f);

不幸的是,运算符只能在C#中的类内部重载,不能在类外部重载。

您的定义中缺少this关键字。

public static Vector2 Subtract(this Vector2 v1, float a)
{
    return new Vector2(v1.X - a, v1.Y - a);
}