Передовые методы получения, установки и свойств. Java против C #

Я сейчас изучаю класс 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 ? Почему я должен / должен делать это из-за наличия специальных методов установки и получения (с соответствующей логикой обработки и проверки).

89
задан Vivin Paliath 9 February 2011 в 18:23
поделиться