При этом (автоматически реализованные) свойства в 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 (особенно читаю Effective Java). Так, например, я предпочитаю неизменность (предоставляя сеттеры только при необходимости). Мне просто любопытно посмотреть, как эти методы сочетаются с различными способами предоставления сеттеров и геттеров в C #; по сути, как бы я перевел лучшие практики из мира Java в C #?

РЕДАКТИРОВАТЬ

Я публиковал это как комментарий к ответу Джона Скита, но потом он стал длинным:

А как насчет нетривиального свойства (т. Е. Со значительной обработкой и проверкой, возможно)? Могу ли я по-прежнему выставлять его через публичное свойство, но с логикой, заключенной вget а такжеset? Почему я должен / должен делать это, имея выделенные методы установки и получения (с соответствующей логикой обработки и проверки).

Ответы на вопрос(12)

Ваш ответ на вопрос