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
相关产品推荐
相关产品推荐

