Дані, що містяться в класі, можуть бути змінними або Змінні, описані в класі, називаються полями класу.
При описі елементів класу можна також указувати атрибути і специфікатори, які задають різні характеристики елементів. Синтаксис опису елементу даних приведений нижче:
[ атрибути ] [ специфікатори ] [ const ] тип ім'я [ = начальне_значення ]
Атрибути будуть розглянуті в розділі 12, а можливі специфікатори полів і констант перераховані в таблиці 5.2. Для констант можна використовувати тільки специфікатори 1- 6.
Таблиця 5.2.
Специфікатори полів і констант класу
№
| Специфікатор
| Опис
|
| new
| Новий опис поля, що приховує успадкований елемент класу
|
| public
| Доступ до елементу не обмежений
|
| protected
| Доступ тільки з даного класу і похідних класів
|
| internal
| Доступ тільки з даної збірки
|
| protected internal
| Доступ тільки з даного класу і похідних класів і з даної збірки
|
| private
| Доступ тільки з даного класу
|
| static
| Одне поле для всіх екземплярів класу
|
| readonly
| Поле доступне тільки для читання
|
| volatile
| Поле може змінюватися іншим процесом або системою
|
За умовчанням елементи класу вважаються за закриті ( private ) . Для полів класу цей вид доступу є переважним, оскільки поля визначають внутрішню будову класу, яка має бути прихована від користувача. Всі методи класу мають безпосередній доступ до його закритих полів.
Поля, описані із специфікатором static, а також константи існують в єдиному екземплярі для всіх об'єктів класу, тому до них звертаються не через ім'я екземпляра, а через ім'я класу. Якщо клас містить тільки статичні елементи, екземпляр класу створювати не потрібно.
Звернення до поля класу виконується за допомогою операції доступу (крапка). Праворуч від крапки задається ім'я поля, зліва - ім'я екземпляра для звичайних полів або ім'я класу для статичних. У лістингу 5.1 приведені приклад простого класу Demo і два способи звернення до його полів.
Лістинг 5.1. Клас Demo, що містить поля і константу
using System;
namespace ConsoleApplication1
{
class Demo
{
public int a = 1; // поле даних
public const double с = 1.66; // константа
public static string s = "Demo"; // статичне поле класу
double y; // закрите поле даних
}
class Classl
{
static void Main( )
{
Demo x = new Demo( ); // створення екземпляра класу Demo
Console . WriteLine ( x.a ); // x.a - звернення до поля класу
Console . WriteLine ( Demo.с ); // Demo.с - звернення до константи
Console . WriteLine ( Demo.s ); // звернення до статичного поля
}
}
}
Поле у вивести на екран аналогічним чином не вдасться: воно є закритим, тобто недоступно ззовні ( з класу Classl). Оскільки значення цьому полю явним чином не привласнене, середовище привласнює йому значення нуль.
Всі поля спочатку автоматично ініціалізувалися нулем відповідного типу (наприклад, полям типу int привласнюється 0, а посиланням на об'єкти - значення nu11) . Після цього полю привласнюється значення, задане при його явній ініціалізації. Завдання початкових значень для статичних полів виконується при ініціалізації класу, а звичайних - при створенні екземпляра.
Поля із специфікатором readonly призначені тільки для читання. Встановити значення такого поля можна або при його описі, або в конструкторі (конструктори розглядаються далі в цьому розділі).
Методи
Метод - це функціональний елемент класу, який реалізує обчислення або інші дії, що виконуються класом або екземпляром. Методи визначають поведінку класу.
Методом є закінчений фрагмент коду, до якого можна звернутися по імені. Він описується один раз, а викликатися може стільки разів, скільки необхідно. Один і той же метод може обробляти різні дані, передані йому як аргументів.
Синтаксис методу:
[ атрибути ] [ специфікатори ] тип імя_метода ( [ параметри ] )