public class Gameplay {
public static int count = 0;
AClass aClass = new AClass(ref count);
}
public class AClass {
public int count { get; set; }
public AClass(ref int c) {
this.count = c;
}
public void printCount() {
Console.WriteLine(this.count.ToString());
}
}
我有两个类,如上所述。假设Gameplay的count变量在 Gameplay.count ++ 的另一个类中增加。我希望AClass.count始终等于Gameplay.count。
现在,我当然可以在AClass中使用Gameplay.count但是如果我有不同的计数来传递AClass的不同实例,那么最好能够引用你想要访问的计数。即使游戏玩法计数增加,上面的示例总是写0。
答案 0 :(得分:3)
您希望此代码能做什么?
int c = 0;
int count = c;
c++;
c
和count
都是引用,但是变异c
不会改变count
的值。
您的代码中的情况完全相同。
在您的代码中,这一行:
this.count = c;
不会将引用复制到c
。它将赋值时的值复制到count
的值类型后备字段。
如果您需要AClass
能够访问某个任意整数的值,您可以将lambda expression传递给构造函数。
public class Gameplay {
public static int count = 0;
AClass aClass = new AClass( () => count );
}
public class AClass {
public int count { get { return this.getCount(); } }
private readonly Func<int> getCount;
public AClass(Func<int> getCount) {
this.getCount = getCount;
}
public void printCount() {
Console.WriteLine(this.count.ToString());
}
}
答案 1 :(得分:1)
在你的构造函数中:
"success"
...即使参数public AClass(ref int c) {
this.count = c;
}
通过引用传递,只要将其分配给c
,该值就会被复制。因此,对this.count
或c
的任何更改都不会反映在Gameplay.count
中。
答案 2 :(得分:0)
这将是具有挑战性的,因为整数是价值类型。
您可以尝试使用具有Count属性的类,并将其传递给它。如果您有多个具有Count属性的对象,则可以声明具有Count属性的接口(让我们称之为IHasCount
)并让AClass
将IHasCount
的实例作为其参数。< / p>
你的设计开始听起来像使用Singleton模式,现在不鼓励这样做。你可能想读一下。
答案 3 :(得分:0)
将计数包装到另一个班级
public class CounterHolder
{
public int count = 0;
}
public class Gameplay
{
public static CounterHolder counterHolder = new CounterHolder();
AClass aClass = new AClass(counterHolder);
public void DoSomething()
{
// Something
counterHolder.count++;
aClass.printCount();
}
}
public class AClass
{
private CounterHolder _counterHolder;
public AClass(CounterHolder counterHolder)
{
_counterHolder = counterHolder;
}
public void printCount()
{
Console.WriteLine(_counterHolder.count.ToString());
}
}