Comment créer les variables privées de Dart?
Je veux créer une variable privée mais je ne peux pas.
Voici mon code:
void main() {
var b = new B();
b.testB();
}
class A {
int _private = 0;
testA() {
print('int value: $_private');
_private = 5;
}
}
class B extends A {
String _private;
testB() {
_private = 'Hello';
print('String value: $_private');
testA();
print('String value: $_private');
}
}
Lorsque j'exécute ce code, j'obtiens le résultat suivant:
String value: Hello
int value: Hello
Breaking on exception: type 'int' is not a subtype of type 'String' of 'value'.
Aussi j'ai pas d'erreur ou de mises en garde lors de la modification de ce code source.
Comment puis-je créer une variable privée dans Dart?
Vous devez vous connecter pour publier un commentaire.
De Dart de la documentation:
Bibliothèques non seulement de fournir des Api, mais d'une unité de la vie privée: les identifiants qui commencent par un caractère de soulignement
_
sont visibles qu'à l'intérieur de la bibliothèque.De la vie privée dans Dart existe à la bibliothèque, plutôt que le niveau de la classe.
Si vous deviez mettre Une classe dans un fichier de bibliothèque (par exemple,
other.dart
), tels que:puis l'importer dans votre application principale, tels que:
Vous obtenir le résultat attendu:
Le haut de réponse aujourd'hui est certainement correct.
Je vais essayer d'aller plus en détail dans cette réponse.
Je vais répondre à la question, mais la tête avec cela: C'est juste pas comment Dart est destiné à être écrit, en partie en raison de la bibliothèque-privé des membres de la rendre plus facile à définir les opérateurs comme
==
. (Variables privées d'un deuxième objet ne pouvait pas être vu pour la comparaison).Maintenant que nous avons obtenu que sur le chemin, je vais commencer par vous montrer comment c'est censé être fait (bibliothèque-privé au lieu de la classe-privé), et ensuite vous montrer comment créer une variable de classe-privé si vous voulez encore que. Ici nous allons.
Si une classe n'a pas à voir les variables sur une autre classe, vous pourriez vous demander si vraiment ils appartiennent à la même bibliothèque:
Ça devrait être bon. Toutefois, si vous vraiment voulez privé de données de la classe:
Si vous techniquement ne sont pas autorisés à créer des variables privées, vous pourrait imiter à l'aide de la suite de la fermeture de la technique.
(CEPENDANT, vous devriez examiner ATTENTIVEMENT si vous en avez vraiment besoin et si il y a un mieux, plus Dart, comme moyen de faire ce que vous essayez d'accomplir!)
Donc oui. Juste être prudent et essayer de suivre la langue de meilleures pratiques et vous devriez être bien.
MODIFIER
Apparemment il y a une nouvelle définition de type syntaxe préféré pour Dart 2. Si vous utilisez Dart 2 vous devriez l'utiliser. Ou, mieux encore, utiliser la fonction inline types.
Si vous utilisez la deuxième, il sera moins détaillé, mais les autres problèmes demeurent.
_val
implicitement obtient un getter et un setter?