C#中的运算符重载 - 实际代码代码应该放在哪里?

Ala*_*tts 6 .net c#

一个概念性的问题:

我正在创建我的自定义结构,在Vector3的静脉中(3个int值),我正在重载标准运算符(+, - ,*,/,==等...)

当我正在构建一个供外部使用的库时,我试图遵循FxCop规则.因此,他们建议使用执行相同功能的方法.

例如..Add(),. Subtract()等...

为了节省代码重复,这些方法之一(运算符重载或实际方法)将调用另一个方法.

我的问题是,哪个应该叫哪个?

是吗(这只是一个示例代码):

一个)

    public static MyStruct operator +(MyStruct struc1, MyStruct struct2)
    {
        return struc1.Add(struct2);
    }

    public MyStruct Add(MyStruct other)
    {
        return new MyStruct (
            this.X + other.X,
            this.Y + other.Y,
            this.Z + other.Z);
    }
Run Code Online (Sandbox Code Playgroud)

要么:

B)

    public static MyStruct operator +(MyStruct struc1, MyStruct struct2)
    {
        return new MyStruct (
            struct1.X + struct2.X,
            struct1.Y + struct2.Y,
            struct1.Z + struct2.Z);
    }

    public MyStruct Add(MyStruct other)
    {
        return this + other;
    }
Run Code Online (Sandbox Code Playgroud)

我真的不确定哪一个更好,但我正在寻找一些意见:)

bit*_*onk 24

我会选择A).由于运算符重载不符合CLS(并非所有.NET语言都支持重载运算符),因此可以将其视为实际 Add方法的语法糖.