РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
106 of 723 menu

Константный конструктор

Константный конструктор объявляется с помощью ключевого слова const перед именем конструктора. Такой конструктор позволяет создавать объекты, значения которых известны на этапе компиляции. Класс, содержащий константный конструктор, должен иметь все поля объявленные как final. Объекты, созданные через константный конструктор, автоматически становятся каноническими - Dart переиспользует один и тот же экземпляр для одинаковых значений.

Константный конструктор не может иметь тело. Все поля класса должны быть инициализированы через список инициализации или через параметры конструктора. Если конструктор объявлен как const, то и все его параметры должны быть final.

Синтаксис

class ClassName { final type field; const ClassName(this.field); }

Пример

Давайте создадим класс с константным конструктором и создадим два одинаковых объекта:

class Point { final int x; final int y; const Point(this.x, this.y); } void main() { const Point p1 = Point(1, 2); const Point p2 = Point(1, 2); print(identical(p1, p2)); }

Результат выполнения кода:

true

Как видите, p1 и p2 - это один и тот же объект, потому что константные объекты с одинаковыми значениями канонизируются.

Пример

Давайте используем константный конструктор в константном выражении, например, при создании константного списка:

class Point { final int x; final int y; const Point(this.x, this.y); } void main() { const List<Point> points = [ Point(1, 2), Point(3, 4), ]; print(points); }

Результат выполнения кода:

[Instance of 'Point', Instance of 'Point']

Пример

Давайте создадим именованный константный конструктор:

class Point { final int x; final int y; const Point(this.x, this.y); const Point.origin() : x = 0, y = 0; } void main() { const Point p = Point.origin(); print(p.x); print(p.y); }

Результат выполнения кода:

0 0

Смотрите также

  • ключевое слово decl,
    которое объявляет класс
  • именованный конструктор named-constructor,
    который создает дополнительные конструкторы
  • список инициализации initializer-list,
    который инициализирует поля класса
  • ключевое слово static,
    которое объявляет статические члены класса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить