Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 私有实例变量的用途是什么?_Flutter_Dart - Fatal编程技术网

Flutter 私有实例变量的用途是什么?

Flutter 私有实例变量的用途是什么?,flutter,dart,Flutter,Dart,我正在研究dart,这里有一个使用私有实例变量的示例代码: class User { String _first; String _last; String getFullName() { return "$_first $_last"; } } main() { User user = User(); user._first = "Bob"; user._last = "Smith"; var fullName = user.

我正在研究dart,这里有一个使用私有实例变量的示例代码:

class User {
String _first;
String _last;
  
String getFullName() {
return "$_first $_last";
}
}

main() {
User user = User();
user._first = "Bob";
user._last = "Smith";
var fullName = user.getFullName();
print(fullName);
}

代码在有下划线或没有下划线的情况下似乎都是一样的,所以我真的很难理解它的真正用途,也想不到一个真实的例子,说明什么时候受保护的变量可以派上用场。因为每个人都可以自由地进入您的代码并调整其实现,所以受到了保护。私有方法也是如此。希望有人能帮助我理解

你是正确的,任何人都可以进入你的代码并调整它的实现。 但是我们声明变量为protected或private,以使代码更好。这些被称为访问修饰符,允许您限制变量访问或控制属性或方法的访问范围

当您将一个变量声明为public时,可以从类内、类外以及任何可能扩展它的类的任何位置访问它

如果将其声明为protected,则不能从类外部访问它,而只能从类内部以及扩展父类的任何类访问它

当您将它声明为private时,您不能从外部或任何扩展类访问它,而只能从声明它的类内部访问它


希望它能帮助你!:)

它防止创建不需要的和无意的依赖项。

class FooUtils{
  
  //Foo variables
  int _fooId;
  
  //Foo methods
  void _updateFooState(){
    
  }
  
  //Foo util methods for users
  void getUserDOB(int userId){
    //some logic
    _updateFooState();
  }
  
}

class UserClass{
  // User specific code 
  
}
当您编写其他人将使用的util、库或包时,您不希望在
类的内部状态上创建依赖项


默认情况下,如果类成员未标记为
\uuu
,则它们是
公共的
。如果这些成员可见且可修改,则无法保证应用程序的状态一致。在上面的示例中,
\u fooId
FooUtils
的内部实现细节,任何使用
FooUtils
类的人都不应该看到它。如果从外部修改,可能会导致输出错误。

当然。我感兴趣的是一个简单的例子,说明这是如何让事情变得更好的,而不是说它没有。当然,任何编写代码的人都不会以破坏代码的方式随机更改变量,所以为什么需要进行保护呢?这种影响和重要性在类间要明显得多,就像在外部包和库中一样。使用库修改类时,不应访问内部状态。在这种情况下,用户代码与您的实现紧密耦合,并且可以在您发布任何更改时中断。在这种情况下不保证一致性。哦,我明白了。因此,这只是帮助最终用户避免愚蠢的错误,如更改变量/执行他们不应该执行的类方法,从而破坏了代码的工作方式。就像在Flatter中开发一样,有一些小部件实现将默认受保护的
高度
变量设置为等于屏幕高度的一半,如果不受保护,则一些用户可能会尝试指定不同的高度,因为他们认为这是可访问的,从而破坏小部件逻辑。这是我能想到的正确方法吗?是的,而且用户现在依赖于一些他们不应该依赖的东西。他们的应用程序现在与我们的库的内部工作方式相关联。我们明天可能会决定更改内部实现,这可能会破坏用户的生产应用程序。很酷,现在我终于明白了,为此奋斗了一整天,谢谢!我开始时也有同样的疑问:)