具有属性的奇怪行为

时间:2013-05-16 15:44:30

标签: c# .net properties

我对C#有一种奇怪的行为。

我有一个包含静力学的课程,有些像这样的东西:

 public class Status
 {
     public int Id { get; internal set; }
     public string Name { get; internal set;}

     public static Status Created = new TicketStatus { Id = 1, Name = "Created" };
 }

我这样使用它(假设myObj.Status是一个状态实例,Id = 1且Name =“Created”):

Assert.AreEqual(myObj.Status, Status.Created);
    // True

它工作正常,两个对象都是平等的。

但如果我将我的Status类改为:

 public class Status
 {
     public int Id { get; internal set; }
     public string Name { get; internal set;}

     public static Status Created
     {
        get { return new TicketStatus { Id = 1, Name = "Created" }; }
     }
 }

然后声明

Assert.AreEqual(myObj.Status, Status.Created);
    // False

不再起作用,两个对象都不同。

我不明白为什么?

1 个答案:

答案 0 :(得分:7)

这很简单 - 您正在比较引用(内存地址),而不是对象属性。您需要覆盖类中的相等操作。 Equals方法和GetHashCode也是。