Принципы построения классов.
Класс – позволяет описать структуру объекта и его поведение. Пример:
class Book
{
//поля, методы
}
Все поля и методы класса должны иметь определенный модификатор доступа. В C# применяются следующие модификаторы доступа:
· public: публичный, общедоступный класс или член класса. Такой член класса доступен из любого места в коде, а также из других программ и сборок.
· private: закрытый класс или член класса. Представляет полную противоположность модификатору public. Такой закрытый класс или член класса доступен только из кода в том же классе или контексте.
· protected: такой член класса доступен из любого места в текущем классе или в производных классах.
· internal: класс и члены класса с подобным модификатором доступны из любого места кода в той же сборке, однако он недоступен для других программ и сборок (как в случае с модификатором public).
· protected internal: совмещает функционал двух модификаторов. Классы и члены класса с таким модификатором доступны из текущей сборки и из производных классов.
Пример
class Book
{
public string name;
public string author;
public int year;
public void Info()
{
Console.WriteLine("Книга '{0}' (автор {1}) была издана в {2} году", name, author, year);
}
}
name, author, year – поля класса
Info() – метод класса
рассмотрим структуру объявления классов.
// объявление классов в С++ class /*имя класса*/ { private: /* список свойств и методов для использования внутри класса */ public: /* список методов доступных другим функциям и объектам программы */ protected: /*список средств, доступных при наследовании*/ }; |
При объявлении класса, не обязательно объявлять три спецификатора доступа, и не обязательно их объявлять в таком порядке. Но лучше сразу определиться с порядком объявления спецификаторов доступа, и стараться его придерживаться. Разработаем программу, в которой объявим простейший класс, в котором будет объявлена одна функция, печатающая сообщение.
Чтобы создать новый объект, нам надо использовать ключевое слово new. Оператор new создает объект класса и выделяет для него область в памяти.
ИмяКласса ИмяОбъекта = new ИмяКласса();
Пример.
Class Book
{
public string name;
public string author;
public int year;
Public void GetInformation()
{
Console.WriteLine("Книга '{0}' (автор {1}) была издана в {2} году", name, author, year);
}
}
Class Program
{
static void Main(string[] args)
{
Book b1 = new Book();
b1.name = "Война и мир";
b1.author = "Л. Н. Толстой";
b1.year = 1869;
b1.GetInformation();
}
}
В ООП существует три основных принципа построения классов:
Инкапсуляция – возможность скрывать некоторые поля и методы класса, с целью недопущения ввода некорректных данных, либо для вложения какой-нибудь дополнительной логики.
Наследование – это свойство, позволяющее создать новый класс-потомок на основе уже существующего, при этом все характеристики класса родителя присваиваются классу-потомку.
3. Полиморфизм – способность к изменению функционала, унаследованного от базового класса, а также возможность переопределения методов.
Set и Get свойства.
Рассмотрим пример. Создадим класс Person – описание человека. В качестве полей определим такое поле как имя и возраст. Методов пока добавлять не будем.
Class Person
{
public string name;
public int age;
}
Class Program
{
Person p = new Person();
p.name = "Tom";
p.age = Convert.ToInt32(Console.ReadLine());
}
В данном примере оба поля имя и возраст являются общедоступными.
Как правило программисты делятся на тех, кто разрабатывает классы и на тех, кто этими классами активно пользуется. Предположим, разработчик класса создал класс Person , но при вводе значений полей класса возможен некорректный ввод данных. Следуя принципу инкапсуляции, программисты обычно закрывают доступ к основным полям класса, а для того, чтобы другой программист мог все-таки ввести значения этих полей, создают дополнительные общедоступные поля и используют set-свойство этих полей для установки значений и get-свойство для получения значений полей.
В нашем примере это будет выглядеть следующим образом:
Class Person
{
public string name;
Public string Name
{
Get
{
return name;
}
Private set
{
name = value;
}
}
private int age;
Public int Age
{
Set
{
if (value < 18)
{
Console.WriteLine("Возраст должен быть больше 18");
}
Else
{
age = value;
}
}
get { return age; }
}
}
Class Program
{
Person p = new Person("Tom", 24);
}
В нашем случае теперь доступными будут поля Name и Age, а поля name и age скрыты от разработчика, который пользуется данным классом. Но при установке значения свойству Name значения, автоматически будет установлено значение и свойству name, а при установке значения свойству Age сначала будет произведена проверка ввода данных, если проверка пройдена, то тогда полю age будет присвоено значение.
Конструкторы и деструкторы.
Конструктор (от слова construct — создавать) – это специальный метод класса, который предназначен для инициализации элементов класса некоторыми начальными значениями.
В отличии от конструктора, деструктор (от слова destruct — разрушать) — специальный метод класса, который служит для уничтожения элементов класса. Чаще всего его используют тогда, когда в конструкторе,при создании объекта класса, динамически был выделен участок памяти и необходимо эту память очистить, если эти значения уже не нужны для дальнейшей работы программы.
Важно запомнить:
1. конструктор и деструктор, мы всегда объявляем в разделе public;
2. при объявлении конструктора, тип данных возвращаемого значения не указывается, в том числе — void!!!;
3. у деструктора также нет типа данных для возвращаемого значения, к тому же деструктору нельзя передавать никаких параметров;
4. имя класса и конструктора должно быть идентично;
5. имя деструктора идентично имени конструктора, но с приставкой ~ ;
6. В классе допустимо создавать несколько конструкторов, если это необходимо. Имена, согласно пункту 2 нашего списка, будут одинаковыми. Компилятор будет их различать по передаваемым параметрам (как при перегрузке функций). Если мы не передаем в конструктор параметры, он считается конструктором по умолчанию;
7. Обратите внимание на то, что в классе может быть объявлен только один деструктор;
Конструкторы вызываются при создании нового объекта данного класса. Служат в основном для установки начальных значений. Пример
Class Book
{
public string name;
public string author;
public int year;
Public Book()
{ }