
Зазвичай коли тільки но почанають вивчати мову програмування C#, не вдаються в глибокі тонкощі мовних конструкцій та стандартів написання коду. Але я вважаю трішки інакше, що краще почати писати код по стандартам, щоб потім не пересилювати себе, або не красніти за свій код.
Тема по накшталп "Соглашения по оформлению кода Java (Java Code Conventions)", але для C# (.NET), це буде інший пост в моєму блозі! Тут же же ми поговоримо про тонку грань різниці між змінними та полями, та затронемо тему таємниці нижнього підкреслення в назвах полів у C#. То ж нехай цей матеріал буде авансом до опису другої глави з циклу вивчення C#.
Поля та змінні в коді, це одне й те саме! Принціпова різниця між ними в C# полягає переважно в тому, де вони оголошуються і як використовуються.
Змінна або як ще кажуть "variable" - це будь-яке іменоване місце в пам’яті, де зберігається значення. Зазвичай вони оголошуються в якомусь блоці коду (метод, цикл, умовний оператор, то що)
Наприклад:
void Example()
{
int x = 10; // x — локальна змінна
string message = "Hello"; // теж змінна
}
Особливостями змінних є:
- живуть тільки поки виконується блок, у якому вони оголошені;
- не можуть мати модифікаторів доступу (public, private, то що);
- їх не можна використати поза тим блоком, де вони створені.
Поле, або "field" - це та ж сама змінна, але оголошена в середені класу та поза межами блоків коду, таких як цикли, умовні опреатори та інше.
Наприклад:
class Person
{
public string Name; // поле
private int age; // теж поле
void SayHello()
{
Console.WriteLine($"Мене звати {Name}");
}
}
Основними характеристиками є:
- існують поки існує об’єкт (або клас — якщо поле статичне);
- можуть мати модифікатори доступу (public, private, protected, …);
- задають стан об’єкта - тоб то якісь початкові дані (а якщо ще простіше, то це буде значення чих змінних).
Підсумоючи вище зазначене, можна сказати так:
Поле — це як "постійна характеристика об’єкта". Наприклад, ім’я людини.
Змінна — це як "тимчасова думка в голові під час виконання дії".
Тепер перейдемо до найбільш загадкової речі, а саме нижне підклелювання на початку імені змінних!
Мабуть це найбільш незрозуміла річ, яку можна зустріти в чужому коді, коли ти лишень нещодавно почав вивчати C#. Але насправді, все це досить просто, я б навіть сказав логічно тривіальна штука, зав'язана лише на специфікацією написання коду (мабіть вам і досі нічого не зрозуміло, але досить цікаво, не хвилюйтесь, зараз буде).
Змінні що починаються з нижнього підреслення "_", є полями класу, які найчастіше мають модифікатор доступу "private". Наприклад:
class Person
{
private string _name; // приватне поле класу
private int _age; // також приватне поле класу
public void SetName(string name)
{
_name = name;
}
}
І як я вже казав, це досить логоічно, бо наприклад якщо написати ось такий код:
class Person
{
private string name;
public void SetName(string name)
{
name = name; // помилка логіки
}
}
То ми отримаємо не скільки помилку компіляції, а більше когнітивний десонанс, бо передаємо в якості параметра метода змінну name, і присвоюємо її самій собі, а не полю класу. І як наслідок, при спробі вивести на екран, у нас нічого не буде виведено.
Щоб уникнути такої плутанини, можна написати так:
class Person
{
private string name;
public void SetName(string name)
{
this.name = name; // помилка логіки
}
}
І воно буде вірно (в Java наприклад так і пишуть у методах get та set), але погодьтесь, ща такий варіант не айс, і з нижнім підресленням набагато ліпше орієнтуватись.
_name = name;
То ж запам'ятати як бачете досить просто, нижне підреслення "_" на початку імені змінних ставимолише для полів класу, і виключно для тих, що мають ідентифікатор доступу private, для підтримання чистоти написання коду, відповідно до загальноприйнятих стандартів.
А на останок бонус.
Якщо цей матеріал був вам корисний, то своє дякую ви можете висловити, ось за цим посиланням!