Назад к вопросам
Junior
105
questionbank

Как разработать в Dart класс, чтобы все его поля были доступны только внутри самого класса и недоступны извне?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

class _MyPrivateClass {
  // Поле доступно только внутри этого класса и файла.
  String? _privateField;

  // Конструктор также приватный.
  _MyPrivateClass(this._privateField);

  // Метод доступен только внутри этого класса и файла.
  void _privateMethod() {
    print('This is a private method.');
  }

  // Пример геттера, который может быть публичным,
  // но возвращает значение приватного поля.
  String? get publicGetter => _privateField;

  // Пример публичного сеттера.
  set publicSetter(String? value) {
    _privateField = value;
  }
}

// Другой класс в том же файле может получить доступ к приватным членам.
class AnotherClassInSameFile {
  void accessPrivateClass() {
    var privateInstance = _MyPrivateClass('Hello');
    print(privateInstance._privateField); // Доступ разрешен
    privateInstance._privateMethod(); // Доступ разрешен
  }
}

// В другом файле:
// import 'your_file_name.dart'; // Необходимо импортировать файл

// void main() {
//   var privateInstance = _MyPrivateClass('Hello'); // Ошибка: _MyPrivateClass недоступен
//   print(privateInstance._privateField); // Ошибка: _privateField недоступен
// }

В Dart для обозначения приватных членов класса (полей, методов, конструкторов) используется префикс _. Члены с таким префиксом доступны только внутри файла, где они были объявлены. Сам класс также может быть помечен как приватный с помощью префикса _, что сделает его недоступным за пределами файла.