@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 если свойство приватное то все, только геттеры и сеттеры.
  • Вопрос задан
  • 726 просмотров
Решения вопроса 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
В Dart нет специальных ключевых слов (public; private; protected) то есть спецификаторов доступа, по этому все идентификаторы «публичны» по умолчанию. Вопрос инкапсуляции решен соглашением: приватными считаются все члены класса, чье имя начинается с подчеркивания "_".


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

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

Войти через центр авторизации
Похожие вопросы