Зараз я беру курс C # і намагаюся з’ясувати найкращий спосіб зробити це. Я походжу з мови Java, тому я знайомий лише з найкращими практиками Java; Я новачок на C #!
У Java, якщо я маю приватну власність, я роблю це;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
У C # я бачу, що існує багато способів зробити це.
Я можу це робити як Java:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
Або я можу зробити це так:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
Або:
public string Name { get; set; }
Який із них мені слід використовувати, і які застереження чи тонкощі пов’язані з кожним підходом? Створюючи класи, я дотримуюсь загальних передових практик, які я знаю з Java (особливо читання Effective Java). Так, наприклад, я виступаю за незмінність (надання сетерів лише за необхідності). Мені просто цікаво побачити, як ці практики поєднуються з різними способами надання сетерів та геттерів в C #; по суті, як би я переклав найкращі практики зі світу Java на C #?
РЕДАГУВАТИ
Я публікував це як коментар до відповіді Джона Скіта, але потім це затягнулося:
Що можна сказати про нетривіальну властивість (тобто, можливо, зі значною обробкою та підтвердженням)? Чи можу я все-таки виставити це через загальнодоступну власність, але з логікою, вкладеною в get
і set
? Чому я / повинен робити це, маючи спеціальні методи встановлення та отримання (із пов'язаною логікою обробки та перевірки).