gpt4 book ai didi

c# - 如何在两个类之间共享一个变量?

转载 作者:太空狗 更新时间:2023-10-29 17:35:29 30 4
gpt4 key购买 nike

您将如何在其他两个对象之间共享同一个对象?例如,我想要那种味道的东西:

class A
{
private string foo_; // It could be any other class/struct too (Vector3, Matrix...)

public A (string shared)
{
this.foo_ = shared;
}

public void Bar()
{
this.foo_ = "changed";
}
}

...
// inside main
string str = "test";
A a = new A(str);

Console.WriteLine(str); // "test"
a.Bar();
Console.WriteLine(str); // I get "test" instead of "changed"... :(

在这里,我不想给 Bar 方法一个引用。我想要实现的是在 C++ 中看起来像的东西:

class A
{
int* i;
public:
A(int* val);
};

A::A (int* val)
{
this->i = val;
}

我读到有一些 ref/out 的东西,但我无法得到我在这里要问的内容。我只能在使用 ref/out 参数的方法范围内应用一些更改...我还读到我们可以使用指针,但没有其他方法吗?

最佳答案

这与共享对象无关。您将对字符串的引用传递给 A 构造函数。该引用被复制到私有(private)成员 foo_ 中。稍后,您调用了 B(),它将 foo_ 更改为“changed”。

您从未修改过strstrmain 中的局部变量。您从未传递对它的引用。

如果你想改变str,你可以定义B为

   public void Bar(ref string s)
{
this.foo_ = "changed";
s = this.foo_;
}

考虑:

public class C
{
public int Property {get;set;}
}

public class A
{
private C _c;
public A(C c){_c = c;}

public void ChangeC(int n) {_c.Property = n;}
}

public class B
{
private C _c;
public B(C c){_c = c;}

public void ChangeC(int n) {_c.Property = n;}
}

主要是:

C myC = new C() {Property = 1;}
A myA = new A(myC);
B myB = new B(myC);

int i1 = myC.Property; // 1
myA.ChangeC(2);
int i2 = myC.Property; // 2
myB.ChangeC(3);
int i3 = myC.Property; // 3

关于c# - 如何在两个类之间共享一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535815/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com