我正在尝试编写一些代码,这些代码可以通过其他类的函数将变量相加,作为对某些作品的测试。我不想写返回,扩展,全局变量但仍然可以添加值。有任何想法吗?或者是不可能的?
void main() {
bbb B = new bbb();
B.bOut();
}
class bbb{
int b = 1;
void bOut(){
aaa A = aaa(this.b);
A.aAdd();
print(b);
}
}
class aaa{
int variableA;
aaa(this.variableA);
void aAdd (){
variableA++;
}
}
Run Code Online (Sandbox Code Playgroud)
输出为 1
欢迎来到 SO Wesley!
在 Dart 中,与许多其他面向对象的编程语言一样,对象总是按值传递。但是您仍然可以按值传递指向对象和数组的指针。感谢@jamesdlin 在评论中指出这一点。要更深入地了解这个主题:Java 是按引用传递还是按值传递?
this.b您可以简单地传递对 object: 的引用bbb并访问变量,而不是传递b。我准备了一个简单的例子:
输出:
0
1
Run Code Online (Sandbox Code Playgroud)
代码:
class Wrapper {
int i;
}
test() {
Wrapper wrapper = Wrapper();
wrapper.i = 0;
print(wrapper.i);
increase(wrapper);
print(wrapper.i);
}
increase(Wrapper wrapper) {
wrapper.i++;
}
Run Code Online (Sandbox Code Playgroud)
正如詹姆斯德林所说:
我认为 Dart 与许多面向对象的语言一样,它总是按值传递,并且对象的值是对它的引用。在真正的引用传递系统中,被调用者可以修改调用者中的变量(与 C++ 的引用参数一样)。
假设我在一张纸上写下我的家庭住址并给你。如果你走开撕纸或划掉地址并写一个不同的,那不会改变我的家或我的地址。不管你对我给你的那张纸做什么,我仍然有同样的家和同样的地址。
但是,如果您使用我在纸上写的地址找到我的家,您可以粉刷建筑物或带走垃圾或种花。这会改变我家的一些事情,但不会改变地址。
Dart 也是一样。您可以将变量作为参数传递给某个函数。如果变量引用的对象是可变的,则函数可以更改对象的状态,但不能更改该对象在内存中的存储位置。
这是上面故事的 Dart 版本,灵感来自这个 Java 示例。
void main() {
Home addressToMyHome = Home('blue');
Home myAddressCopy = addressToMyHome;
print('My home is ${addressToMyHome.color}.');
print('Here is my address.');
writeNewAddressOnPaper(addressToMyHome);
print('But my home is still ${addressToMyHome.color}.');
print('Here is my address again.');
goToMyHomeAndPaintIt(addressToMyHome);
print('Now my home is ${addressToMyHome.color}.');
if (addressToMyHome == myAddressCopy) {
print('My address has not changed, though.');
}
}
void writeNewAddressOnPaper(Home home) {
home = Home('purple');
print('You made a new ${home.color} home.');
}
void goToMyHomeAndPaintIt(Home home) {
home.color = 'purple';
print('You are painting my home ${home.color}.');
}
class Home {
String color;
Home(this.color);
}
Run Code Online (Sandbox Code Playgroud)
这将打印以下故事:
My home is blue.
Here is my address.
You made a new purple home.
But my home is still blue.
Here is my address again.
You are painting my home purple.
Now my home is purple.
My address has not changed, though.
Run Code Online (Sandbox Code Playgroud)
请注意,变量addressToMyHome不包含Home对象本身,而仅包含对象Home在内存中存储位置的值。
| 归档时间: |
|
| 查看次数: |
7765 次 |
| 最近记录: |