В C#, если я использую структуру, как показано ниже, и сравнивает равенство, значения полей структуры будут сравниваться, и я получаю результат true, если все поля имеют одинаковые поля value.Это поведение по умолчанию.Использование структур вместо классов для простых типов
struct PersonStruct
{
public PersonStruct(string n,int a)
{
Name = n;Age = a;
}
public string Name { get; set; }
public int Age { get; set; }
}
var p1 = new PersonStruct("Jags", 1);
var p2 = new PersonStruct("Jags", 1);
Console.WriteLine(p1.Equals(p2)); //Return True
В случае класса то же самое вернет значение false, поскольку оно является ссылочным типом.
class PersonClass
{
public PersonClass(string n, int a)
{
Name = n; Age = a;
}
public string Name { get; set; }
public int Age { get; set; }
}
var pc1 = new PersonClass("Jags", 1);
var pc2 = new PersonClass("Jags", 1);
Console.WriteLine(pc1.Equals(pc2));//Returns False
Я понимаю, что выше concept.My вопрос рассматривает вышеприведенный сценарий это хорошая идея использовать структуры в таких простых случаях вместо класса? Обычно я видел, как люди реализуют классы в таких случаях (например, простые DTO) и делают все лишние вещи для реализации операторов равенства (таких как метод IEquatable и overridden equals).
Является ли мое понимание правильным или я чего-то не хватает?
Реализация равенства по умолчанию 'System.ValueType' использует отражение и относительно неэффективна. Поэтому вы должны реализовать 'IEquatable' для ваших структур и классов. Еще важнее, чтобы структуры избегали бокса, который произошел бы при вызове 'object.Equals'. –
Lee
Вы должны сделать вашу структуру неизменной, [изменчивые структуры злы] (https://blogs.msdn.microsoft.com/ericlippert/2008/05/14/mutating-readonly-structs/). –