ВАЖЛИВО ОНОВЛЕННЯ (12 квітня 2016 р.):
Ми звернули увагу на те, що внутрішній стандарт команди .NET CoreFX наполягає на використанні підкреслювальної позначення, не даючи жодної розуміння того, чому. Однак , якщо ми уважно подивимося на правила # 3 стає очевидним , що існує система _, t_, s_префіксів, передбачає , чому _був обраний в першу чергу.
- Ми використовуємо
_camelCaseдля внутрішніх і приватних полів і використовуємо лише для читання лише там, де це можливо. Поля примірника префікса з _, статичні поля з s_і потокові статичні поля з t_. При використанні в статичних полях readonlyслід надходити static(тобто static readonlyні readonly static).
- Ми уникаємо,
this.якщо абсолютно не потрібно.
Отже, якщо ви просто схожі на команду .NET CoreFX, яка працює над критичним, багатопотоковим, системним кодом на рівні продуктивності , то вам НАДІЙНО ЗАПРОШЕНО :
- дотримуватися своїх стандартів кодування та
- використовувати позначення підкреслення та
- більше не читайте цю відповідь
В іншому випадку читайте далі ...
ОРИГІНАЛЬНИЙ ВІДПОВІДЬ:
Давайте спочатку домовимось про те, що ми говоримо. Питання полягає в тому, як ми отримуємо доступ до членів екземплярів у межах нестатичних методів та конструкторів класу / підкласів, якщо модифікатори видимості дозволяють це робити.
Підкреслення-позначення
- пропонує використовувати префікс "_" у назвах приватних полів
- він також говорить, що ніколи не слід використовувати "це", якщо це абсолютно не потрібно
Це-позначення
- пропонує вам просто завжди використовувати "це". для доступу до будь-якого члена примірника
Чому це позначення існує?
Тому що це ти
- скажіть один від одного параметр від поля, коли вони мають спільне ім’я
- переконайтеся, що ви працюєте в контексті поточного примірника
Приклад
public class Demo
{
private String name;
public Demo(String name) {
this.name = name;
}
}
Чому існує підкреслення-позначення?
Деяким людям не подобається вводити "це", але вони все ще потребують способу розрізнити поле та параметр, тому вони погодилися використовувати "_" перед полем
Приклад
public class Demo
{
private String _name;
public Demo(String name) {
_name = name;
}
}
Можна подумати, що це лише питання особистого смаку, і обидва способи однаково хороші / погані. Однак є певні аспекти, де ця нотація перемагає підкреслення:
Чіткість
- підкреслення символів захаращує імена
- ця нотація зберігає імена недоторканими
Пізнавальне навантаження
Підкреслення нотації непослідовно, це змушує вас обробляти поля особливим чином, але ви не можете використовувати його з іншими членами, кожен раз, коли вам потрібно запитати себе, чи потрібна вам властивість чи поле
це позначення є послідовним, вам не потрібно думати, ви просто завжди використовуєте "це" для позначення будь-якого учасника
ОНОВЛЕННЯ: як було зазначено, наступне не є перевагою
Технічне обслуговування
Підкреслення нотації вимагає від вас _уважного під час рефакторингу, скажімо, перетворення поля у властивість (видалити _) або навпаки (додати _)
ця нотація не має такої проблеми
Автозавершення
Коли вам потрібно переглянути список членів екземпляра:
- Підкреслення нотації не дуже допоможе вам, тому що при введенні "_" спливаюче вікно автозаповнення показує вам приватні поля та всі типи, доступні з пов'язаних збірок, змішаних з рештою членів екземпляра
- ця нотація дає вам чітку відповідь, набравши "це", все, що ви бачите, - це список членів і нічого іншого
Неоднозначність
Іноді доводиться мати справу з кодом без допомоги Інтеллісенса. Наприклад, коли ви робите огляди коду або переглядаєте вихідний код в Інтернеті.
Підкреслення нотацій неоднозначне: коли ви бачите Something.SomethingElse, ви не можете сказати, чи щось є клас, а SomethingElse - його статична властивість ... чи, можливо, щось є поточним властивістю екземпляра, яке має свою властивість SomethingElse
ця нотація зрозуміла: коли ви бачите Something.SomethingElse, це може означати лише клас зі статичною властивістю і коли ви бачите це.Something.SomethingElse, ви знаєте, що щось є членом, а SomethingElse - його властивістю
Методи розширення
Не можна використовувати методи розширень у самому екземплярі без використання "цього".
- Підкреслення нотації вимагає, щоб ви не використовували "це", однак із методами розширення, які вам потрібно
- це позначення рятує вас від вагань, ви завжди використовуєте "цей" період.
Підтримка Visual Studio
Офіційні рекомендації
Існує багато офіційних вказівок, які чітко говорять про те, що "не використовуйте підкреслення", особливо в C #