所以可以说我有两个班级。这样的A级和B级:
Class A
{
B classB;
public A
{
classB = new B();
}
public void funcIHaveToUseInClassB()
{
}
}
Class B
{
A classA;
public B
{
classA = new A();
}
public void funcIHaveToUseInClassA()
{
}
}
您可以看到两个类都包含需要在另一个类中使用的函数。 A类具有B类必须使用的功能,反之亦然。不,我不能仅仅将函数放在另一个类中,因为它们严重依赖于当前所在的类。那么我该怎么做呢?使用我的方法,我创建了一个无限循环并获得了堆栈溢出异常。我希望有人能帮助我,谢谢。
编辑: 人们在问我为什么我需要这两个类互相依赖,所以这里是:A类管理与WebBrowser控件有关的所有事情,而B类管理与程序中某个页面有关的所有事情。类A被多个页面使用,这就是它需要是单独的类的原因。 A类有时需要将信息推送到B类。B类有时需要来自WebBrowser控件的信息,而A类正在管理,这就是为什么它调用函数的原因。
答案 0 :(得分:1)
您需要将一个类的实例传递给另一个类的构造函数。 试试这个:
Class A
{
B classB;
public A()
{
classB = new B(this);
}
public void funcIHaveToUseInClassB()
{
}
}
Class B
{
A classA;
public B(A arg)
{
classA = arg;
}
public void funcIHaveToUseInClassA()
{
}
}
更新
或者只是将实例作为参数传递给Matt Mattsen的答案中的方法。
答案 1 :(得分:0)
创建一个私有和公共访问器,并仅在私有对象为null时实例化属性,如下所示:
class A
{
private B _b;
public B b {
get {
if (_b == null) _b = new B();
return _b;
}
}
// Constructor can now be empty
public A()
{
}
}
答案 2 :(得分:0)
每次需要使用参考文献时,请将其从B / A传递到A / B。您不需要构造函数。
Class A
{
public void funcIHaveToUseFromClassB(B classB)
{
}
}
Class B
{
public void funcIHaveToUseFromClassA(A classA)
{
}
}
答案 3 :(得分:0)
将classB和classA设置为公共属性,然后从另一个类而不是构造函数对其进行初始化。
class A
{
public B classB { get; set; }
public void funcIHaveToUseInClassB()
{
}
public void anotherF()
{
classB.funcIHaveToUseInClassA();
}
}
class B
{
public A classA { get; set; }
public void funcIHaveToUseInClassA()
{
}
public void anotherF()
{
classA.funcIHaveToUseInClassB();
}
}
static void main()
{
// entry point
var a = new A();
var b = new B();
a.classB = b;
b.classA = a;
// do what ever you want with a and b
}