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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/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
dart中静态和类方法的差异_Dart - Fatal编程技术网

dart中静态和类方法的差异

dart中静态和类方法的差异,dart,Dart,我对达特有点陌生。我试图理解这两种方法之间的区别。这两种方法是不同的还是相同的?我应该在哪里使用一个高于另一个?有人能给我解释一下吗 class A { A.executor1() { print('executor one is called'); } static executor2() { print('executor two is called'); } } 同时,创建新实例不需要两个方法调用?两者都使用类名调用 void main() { A.

我对达特有点陌生。我试图理解这两种方法之间的区别。这两种方法是不同的还是相同的?我应该在哪里使用一个高于另一个?有人能给我解释一下吗

class A {
  A.executor1() {
    print('executor one is called');
  }

  static executor2() {
    print('executor two is called');
  }
}
同时,创建新实例不需要两个方法调用?两者都使用类名调用

void main() {
  A.executor1(); // Will print "executor one is called"
  A.executor2(); // Will print "executor two is called"
}
可以在不创建类实例的情况下调用静态方法。executor1将访问此实例,依此类推,因为它附加到实际实例,但静态方法不会,因为它们不附加到任何对象

在Javascript中考虑:

高级自行车{ 静态数轮=2; 构造器颜色{ 这个颜色=颜色; } 静态车轮数{ console.log`每辆自行车都有${this.numWheels}个轮子。`; } 霉色{ log`这辆自行车是${This.color}.`; } } //实例的属性 新自行车“红色”。我的颜色; //任何人都可以! 自行车;车轮数 A.Executor 1是一个命名构造函数。静态执行器2是一种静态方法

使用IDE或dartpad.dev,将光标放在每个方法上时,可以看到不同的返回类型:


我理解静态方法和实例方法之间的区别。这里的情况不同,它们都不需要类的实例。如果尚未创建实例,Executor 1将指向何处?看起来A.Executor 1{…}与定义静态Executor 1{…}相同,因此它们是相同的。一个实例方法应该是executor1{…}。你可以转到这个链接来更好地理解它。
void main() {
  A.executor1(); // (new) A A.executor1()
  A.executor2(); // dynamic executor2()
}