@VarIzo

Почему приватные свойства класса в dart все же доступны?

Доброго дня.
Изучая Классы в языке Dart наткнулся на странный для меня момент.

void main() {
  T t = T();
  t._name = "1";
  print(t._name);
  print("");
  t.name = "2";
  print(t.name);
}

class T{
  String _name;
  void set name(String n) => _name = "this is $n";

  String get name => "out $_name";
}


На выходе имеем

1

out this is 2


Выходит что объявление свойства приватным через нижнее подчеркивание не делает его по настоящему приватным? Насколько я помню в java если свойство приватное то все, только геттеры и сеттеры.
  • Вопрос задан
  • 783 просмотра
Решения вопроса 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
В Dart нет специальных ключевых слов (public; private; protected) то есть спецификаторов доступа, по этому все идентификаторы «публичны» по умолчанию. Вопрос инкапсуляции решен соглашением: приватными считаются все члены класса, чье имя начинается с подчеркивания "_".


Другими словами: приватность условна
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Umpiro
Это не классовая приватность, это библиотечная приватность. При использовании вашего кода в качестве библиотеки, переменная _name станет недоступной.
Ответ написан
@Neonoviiwolf
Flutter developer
Вы написали в одном файле, в этом случаи возникает такой момент, приватность работает между файлами. Разместите код по разным файлам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы