Статическое поле в Dart
Статическое поле принадлежит типу, а не отдельному
объекту. Его объявляют внутри класса со словом static.
Снаружи к нему обращаются как Post.count, без
переменной с экземпляром:
class Post {
static int count = 0;
String title = "";
Post() {
count = count + 1;
}
}
Вызовем конструктор и посмотрим на результат:
Post();
Post();
print(Post.count);
Каждый вызов Post() увеличивает одно и то же поле
count. У двух разных объектов свои заголовки, а
счетчик общий для всего класса.
Изменяемое статическое поле живет, пока работает программа. Его используют для общего состояния - лимитов, кэша в памяти, последнего сообщения. Доступ снаружи лучше ограничивать приватным именем и узкими методами:
class Post {
static int _hits = 0;
static int maxHits = 5;
static bool tryHit() {
if (_hits >= maxHits) {
return false;
}
_hits = _hits + 1;
return true;
}
static int remaining() {
return maxHits - _hits;
}
}
Post.tryHit();
Post.tryHit();
Post.tryHit();
Post.tryHit();
Post.tryHit();
Post.tryHit();
print(Post.remaining());
Поле _hits видно только в этом файле. Снаружи остаются
команды tryHit и remaining - так проще не
испортить счетчик прямой записью.
Сделайте класс Employee со статическим полем
count, равным 0. В конструкторе
увеличивайте count на 1. Создайте
два объекта и выведите Employee.count.
Сделайте класс Employee со статическим
count, равным 0, и статическим
методом click(), который увеличивает
count. Вызовите click() три раза
в разных местах файла и выведите Employee.count.