Я сейчас изучаю класс 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 (особенно, читая Эффективную Java). Так, например, Я выступаю за неизменность (предоставляю сеттеры только при необходимости). Мне просто любопытно посмотреть, как эти методы сочетаются с различными способами предоставления сеттеров и получателей в C #; по сути, как мне перевести лучшие практики из мира Java на C #?
EDIT
Я публиковал это как комментарий к ответу Джона Скита, но потом он стал длинным:
А как насчет нетривиального свойства (т.е., возможно, со значительной обработкой и проверкой)? Могу ли я по-прежнему открыть его через общедоступное свойство, но с логикой, заключенной в get
и set
? Почему я должен / должен делать это из-за наличия специальных методов установки и получения (с соответствующей логикой обработки и проверки).