为GUID定义增量运算符

时间:2016-06-06 16:15:20

标签: c# polymorphism operator-overloading

我需要逐步增加GUID,这是我成功实现的  this

但是现在,我想通过Increment运算符++来实现它,因为我希望我的代码看起来像漂亮简洁

我的代码:

public class GuidOps
{
    public static Guid operator ++(Guid input)
    {
        return input.Increment(); //Increment works as intended here
    }
}

这不起作用,因为++运算符所需的类型必须是声明运算符的类的类型。

enter image description here

显然我不能覆盖GUID本身的声明

您认为可以在GUID上定义++吗?

2 个答案:

答案 0 :(得分:1)

因为Guid是密封的,所以甚至远程接近这一点的唯一方法是创建一个包装器,然后更新包装器上的Guid属性。但是,它附带了一些免责声明......

  1. 这非常令人困惑和愚蠢。不要这样做。这种行为无论是预期还是合理。这将导致可维护性问题
  2. 这实际上并没有将增量运算符添加到Guid定义本身;它只将操作符添加到包装器中。现在我们为抽象添加了抽象而没有解决任何问题。代码不太可读。
  3. 也就是说,以下内容将使您接近至少覆盖运营商,并指出试图使代码过于聪明所引起的问题:

    public class GuidWrapper
    {
        public Guid GuidInstance { get; set; } = Guid.NewGuid();
    
        public static GuidWrapper operator ++(GuidWrapper input)
        {
            input.GuidInstance = input.GuidInstance.Increment();
            return input;
        }
    }
    
    var wrapper = new GuidWrapper();
    var guid = wrapper.GuidInstance;
    var guid2 = wrapper++.GuidInstance;
    

答案 1 :(得分:1)

这是不可能的,因为GUID是一个密封的结构