一些定制运营商?

时间:2017-05-24 16:02:29

标签: c# operator-overloading

我在导弹类的很多函数中都使用了这个模式:

class Missile
{
    Vector2 position;

    public void Launch(Vector2 towards)
    {
        Launch(Geom.AngleBetween(position, towards));
    }

    public void Launch(float angle)
    {
        ... DO THE THING
    }
}

这让我写了很多函数2次,我想知道是否有办法用某种自定义运算符编写它们一次?类似的东西:

public virtual void LaunchTowards(Direction dir)
{
    ... DO THE THING
}

使用Direction是一个具有自定义运算符强制转换的类,可以自动将Vector2(朝向点)或浮点(角度)转换为浮点(角度)。问题是自定义操作符必须在C#中是静态的,因此我似乎无法使用从一个点转换为一个角度所需的位置变量。

1 个答案:

答案 0 :(得分:0)

不应将向量转换为浮点数,反之亦然,您应该使Direction成为角度的包装器,并允许从float到DirectionVector2到{{的隐式转换1}}。

Direction