You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中如何使用其他类的变量?(含报错代码示例)

在Dart中跨类访问变量的解决方案

嘿,我来帮你搞定这个问题~你代码里报错的原因很明确:variable是ContainsVariable类的实例变量,它属于这个类的某个具体对象,而不是全局可用的。直接在DoesNotContainVariable里写variable,Dart根本不知道你指的是哪个对象的变量,所以会报“Undefined name”错误。

下面给你三种常用的解决思路,你可以根据自己的需求选:

1. 实例化类对象,通过对象访问变量

如果variable的值是每个ContainsVariable实例独有的,你需要先创建这个类的实例,再通过实例对象来访问变量:

class ContainsVariable { 
  var variable = 1; 
} 

class DoesNotContainVariable { 
  var useVariable;

  // 在构造函数里初始化
  DoesNotContainVariable() {
    // 创建ContainsVariable的实例
    var containsObj = ContainsVariable();
    useVariable = containsObj.variable + 1;
  }
}

你也可以在类的方法里使用,而不是构造函数,核心都是先实例化,再用.访问变量。

2. 将变量改为静态变量(全局共享)

如果variable的值不需要随实例变化,是类的全局共享值,那就给它加上static关键字,这样就能直接通过类名访问了:

class ContainsVariable { 
  static var variable = 1; // 标记为静态变量
} 

class DoesNotContainVariable { 
  // 通过类名直接访问静态变量
  var useVariable = ContainsVariable.variable + 1; 
}

静态变量属于类本身,所有实例共享同一个值,适合存常量或者全局配置类的参数。

3. 通过构造函数传递实例(复用特定对象)

如果你需要在DoesNotContainVariable里使用某个特定的ContainsVariable实例的变量(而不是每次新建实例),可以通过构造函数把这个实例传进去:

class ContainsVariable { 
  var variable = 1; 
} 

class DoesNotContainVariable { 
  var useVariable;

  // 构造函数接收ContainsVariable的实例
  DoesNotContainVariable(ContainsVariable targetObj) {
    useVariable = targetObj.variable + 1;
  }
}

// 使用示例
void main() {
  var myContainsObj = ContainsVariable();
  // 把已有的实例传进去
  var myDoesNotContainObj = DoesNotContainVariable(myContainsObj);
  print(myDoesNotContainObj.useVariable); // 输出2
}

这种方式适合需要多个类共享同一个对象状态的场景。


内容的提问来源于stack exchange,提问作者Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:16:39