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