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

标签 c# .net

有点概念性的问题:

我正在按照 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);
    }

或:

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;
    }

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

最佳答案

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

关于c# - C# 中的运算符重载 - 实际代码应该放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728990/

相关文章:

使用 ASP.NET MVC 4 的 C# Rest Web 服务

c# - 列表<>太多循环

c# - automapper 文档不完整

c# - 是否有一些 Visual Studio 扩展可以检查代码是否存在潜在的线程不安全性?

c# - C# 是否提供了一种编译时方法来基于注释重构代码?

c# - 我应该为远程处理程序集强命名吗?

c# - 使用 LINQ 将 Dictionary<String,Int> 转换为 Dictionary<String,SomeEnum>?

sql - MSSQL : single quotes causes to error in queries

java - .NET 相当于内部类型数组的 java.util.Arrays.hashCode() 函数?

c# - 是否有任何扩展方法使返回 lambda 表达式无效?