2013-05-16 3 views
3

У меня странное поведение с C#.Странное поведение со свойствами

У меня есть класс, который включает в себя статику, то, что lokks так:

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 = "Дата создания "):

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

Он отлично работает, оба объекта равны.

Но если я изменить свой класс состояния в этом:

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 

больше не работает, оба объекта различны.

Я не понимаю, почему?

ответ

7

Это просто - вы сравниваете ссылки (адреса памяти), а не свойства объекта. Вы должны переопределить операции равенства внутри вашего класса. Equals способ и GetHashCode тоже.

Смежные вопросы