Я дізнаюся про кодові контракти в .NET, і я намагаюся зрозуміти ідею чистих конструкторів. Документація кодових контрактів зазначає:
Усі способи, які викликаються в рамках договору, повинні бути чистими; тобто вони не повинні оновлювати будь-який попередній стан. Чистим методом дозволяється змінювати об'єкти, створені після вступу в чистий метод.
А в PureAttribute
документації зазначено:
Вказує на те, що тип чи метод чистий, тобто він не вносить видимих змін у стан.
Я розумію ці твердження, коли мова йде про методи, а як щодо конструкторів? Припустимо, у вас був такий клас:
public class Foo
{
public int Value { get; set; }
public Foo(int value) {
this.Value = value;
}
}
Цей конструктор, очевидно, впливає на стан нового Foo
об'єкта, але він не має інших побічних ефектів (наприклад, він не маніпулює жодними параметрами та не викликає будь-які нечисті методи). Це кандидат [Pure]
чи ні? Яке значення розміщення [Pure]
атрибута на конструкторі, і коли я повинен це зробити у власному коді?