将操作员添加到第三方类型

本文关键字:第三方 类型 添加 操作员 | 更新日期: 2023-09-27 18:03:01

我有一个第三方库(Mogre),其中是一个结构体(Vector3)。我想为这种类型的'+'操作符添加重载(不需要重写),但我不确定如何。

不能使用扩展方法,因为它是一个我想扩展的操作符;类不是sealed,但也不是partial,所以如果我尝试用新的操作符重载重新定义它,我会得到冲突。

有可能像这样扩展一个类型吗?最好的方法是什么?

将操作员添加到第三方类型

您不能将操作符重载添加到第三方类型—实际上是您无法编辑的任何类。操作符重载必须在其要操作的类型(至少一个参数)内定义。因为它不是你的类型,你不能编辑它,并且struct s不能扩展。

但是,即使它是非sealed class,您也必须使用子类,这将破坏要点,因为您必须使用子类而不是带操作符的超类,因为您不能在基类型之间定义操作符重载…

public class A
{
    public int X { get; set; }
}
public class B : A
{
    public static A operator + (A first, A second)
    {
        // this won't compile because either first or second must be type B...
    }
}

你可以在子类的实例之间完全重载,但是这样你就必须在任何你想重载的地方使用你的新子类,而不是原来的超类,这看起来很笨拙,可能不是你想要的:

public class A
{
    public int X { get; set; }
}
public class B : A
{
    public static B operator + (B first, B second)
    {
        // You could do this, but then you'd have to use the subclass B everywhere you wanted to
        // do this instead of the original class A, which may be undesirable...
    }
}