【问题标题】:Implicit conversion operator overloading re-using the same code隐式转换运算符重载重用相同的代码
【发布时间】:2019-10-11 02:21:12
【问题描述】:

我有几个隐式转换运算符重载,它们都使用完全相同的代码。我将如何重构它? 我希望能够灵活地添加更多隐式运算符重载,而无需每次都更改类。

我试图想出一种可能会派上用场的设计模式。想到了构建器或策略,但我不确定。

注意:Binary.ToBitArray() 有 3 种方法重载 - 一种采用字符串参数,一种采用 int 参数,另一种采用 long 参数。这就是我能够使用相同代码的方式。

    public static implicit operator Register(string binaryNumber)
    {
        //Converting binaryNumber into a BitArray
        BitArray registerBits = Binary.ToBitArray(binaryNumber);

        return new Register(registerBits);
    }

    public static implicit operator Register(int binaryNumber)
    {
        //Converting binaryNumber into a BitArray
        BitArray registerBits = Binary.ToBitArray(binaryNumber);

        return new Register(registerBits);
    }

    public static implicit operator Register(long binaryNumber)
    {
        //Converting binaryNumber into a BitArray   
        BitArray registerBits = Binary.ToBitArray(binaryNumber);

        return new Register(registerBits);
    }

【问题讨论】:

    标签: c#


    【解决方案1】:

    从语法上讲,代码是相同的,但实际上您在方法中调用了三个不同的函数。

    可以使用dynamic 将绑定推迟到运行时,但这会带来一些风险:

    • 您的代码不再是类型安全的。调用者不知道哪些类型作为参数是有效的
    • 在编译时无法发现错误。其他人可以将您的隐式运算符称为布尔值,而您直到运行时才知道有什么问题。

    恕我直言,潜在风险不值得节省一点(大部分)重复代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      相关资源
      最近更新 更多