Всем Хай! Сегодня тема не сложная и поэтому быстро разбирается.
Одним из правил или свойств, не знаю как правильно сказать, является «Инкапсуляция». В прошлой статье я написал, что это назначения неких прав для доступа из другого «класса».
Мне известно о трёх таких правах.
- public – Из названия понятно, что это «публичное» право. То есть доступ есть из любого «класса».
- private – Или «личное» право. Доступ возможен только из того класса, в котором записан этот метод либо поле.
- protected – Это некая смесь первых двух прав. Только в этом случае доступ возможен из любого класса, кроме основного «Program», где пишется основной код. Сегодня у нас не получится его рассмотреть в коде. Мы рассмотрим его, когда будем разбирать «наследование».
И так, давайте взглянем на код.
class Program
{
static void Main(string[] args)
{
Tank tank1 = newTank();
int damage = 100;
tank1.Health = 500;
tank1.Armor = 50;
tank1.Damage = 150;
tank1.TakeDamage(damage);
tank1.ShowStat();
}
}
class Tank
{
public int Health;
public int Armor;
public int Damage;
private int _speed = 300;
public void ShowStat()
{
Console.WriteLine("Танк 1" + "\nЖизни - " + Health + "\nБроня - " + Armor + "\nУрон - " + Damage + "\nСкорость - " + _speed);
}
public void TakeDamage(int damage)
{
Health -= damage - Armor;
}
}
Как вы поняли сегодня у нас на разборе Танк. Характеристики у него, естественно, условные.
Для обозначения характеристик танка, мы создаём «class Tank» за пределами основного класса «Program».
Внутри мы прописываем 4 поля нашего класса. Первые 3 поля у нас имеют публичный доступ «public» для того, чтобы можно было задать вручную характеристики Танка из основного класса. А четвёртое поле имеет приватный тип «private». Вот не хочу, чтобы к нему был доступ. Пусть скорость у всех таков будет одна.
public int Health;
public int Armor;
public int Damage;
private int _speed = 300;
Я говорил что поля в классе можно сравнить с переменными. Отличается только правило записи имени в зависимости от типа доступа.
- Если доступ «public» или «protected», то Имя поля пишем с большой буквы.
- Если доступ «private», то перед именем ставим нижнее подчёркивание и имя поля начинается с маленькой буквы.
Права доступа мы ставим не только при объявлении поля, но и при объявлении методов. Его, как я говорил, вы можете сравнить с функцией.
Давайте создадим два «публичных» метода.
- Первый будет отвечать за вывод характеристик нашего танка.
public void ShowStat()
{
Console.WriteLine("Танк 1" + "\nЖизни - " + Health + "\nБроня - " + Armor + "\nУрон - " + Damage + "\nСкорость - " + _speed);
}
- Второй будет отвечать за урон нашему танку.
public void TakeDamage(int damage)
{
Health -= damage - Armor;
}
Система повреждений у нас будет простая. Жизни танка отнимаем от урона за вычетом брони.
Теперь переходим в основной класс «Program» метода «Main». Здесь мы инициализируем наш новый танк «tank1».
Tank tank1 = new Tank()
И сразу создаём переменную для прописывания урона по танку.
int damage = 100
Теперь пишем имя танка, нажимаем точку и выбираем поля, которые будем заполнять. Если бы поля были приватные, то их не было бы в списке. Собственно мы видим, что поля с выбором скорости в списке у нас нет. Правильно оно ведь у нас приватное.
tank1.Health = 500;
tank1.Armor = 50;
tank1.Damage = 150;
Точно также через точку мы записываем наши методы повреждения и вывода харкетеристик.
tank1.TakeDamage(damage);
tank1.ShowStat();
Компилируем код и видим, что всё посчиталось правильно.
Урон по формуле тоже прошёл такой, какой мы задумали.
Я думаю теперь вам понятно, что инкапсуляция только на слух не понятно. По факту обычные права доступа. Причём не так их и много.
Как вам статья? Понятно? Непонятно? Пишите свои мысли в комментариях. Обязательно подписывайтесь. На следующей недели начнём становиться разработчиком для Яндекса. Ну а я с Вами прощаюсь до послезавтра. Всем пока!
#it #разработкаигр #программированиеснуля #программированиедляначинающих #какстатьпрограммистом #csharp #сишарп