【发布时间】:2009-10-27 21:15:42
【问题描述】:
对于一些背景信息,我有一个在循环中运行的应用程序,并且在任何时候它都会调用 Tick 方法。有一堆类扩展了一个基类并且都有自己的tick方法,并被添加到依赖链中,这样当类A被调用并且它的链中有B和C的实例时,B.Tick被调用,然后是 C.Tick,最后是 A.Tick。
所以在伪代码中,我的类看起来像这样:
public class A : Super
Super b;
Super c;
ArrayList one;
ArrayList two;
tick(){
one.Add(b.LastValue);
two.Add(c.LastValue);
... do something with one and two ...
}
A(){
b = new B(some other array list);
c = new C(ref one);
}
B 工作正常,并且始终获得正确的值。问题是我猜你不能在一个类中存储对另一个变量的引用,所以当我做 new C(ref one);并且 C 的构造函数将一个类变量设置为一个,稍后在 A 中更新一个之后,就像 C 不再知道它仍然应该指向一个(现在已更新)并且只是空的(就像它最初一样在构造函数内部)。关于如何实现我想要做的事情,而不必使用 C# 指针和不安全代码的任何想法?谢谢,希望它有意义:)
编辑: 显然人们无法用与实际问题完全无关的令人困惑的伪代码来回答问题,因此更改为:
编辑 2:C 类
...
ArrayList local;
...
C(ref ArrayList one){
local = one;
}
Tick(){
LastValue = local[0] + 5; //not actual formula, just shows trying to use a referenced variable
}
【问题讨论】:
-
这是 c# 还是 Java?它被标记为 c#,但它确实看起来像 java。
-
当你说“一个在A中更新”时,你是指tick类中的.Add还是其他一些更新?
-
我认为“伪代码”类似于 Java,但他们想要 C# 解决方案
-
@joel,C# @Mikael,我的意思是 .Add @Richard,正确
-
extends 是一个 Java 关键字。 C# 使用冒号表示继承以及接口实现。
标签: c# pass-by-reference