Я сейчас изучаю класс 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 #?
РЕДАКТИРОВАТЬ
Я публиковал это как комментарий к ответу Джона Скита, но потом он стал длинным:
А как насчет нетривиального свойства (например, со значительной обработкой и проверкой)? Могу ли я раскрыть его через общедоступное свойство, но с логикой, заключенной в get
и set
? Зачем / должен я делать это, имея выделенные методы установки и получения (со связанной логикой обработки и проверки).