我有三个相互引用的类。在执行某些方法之前,他们需要从其他类中获取一些数据。有一个大师班,所有三个班级。因此,为便于使用,您创建了master实例,并使用master访问这些类。
internal class Master
{
public Master()
{
a = new A(b, c);
b = new B(c);
c = new C(a, b);
}
public A a;
public B b;
public C c;
}
您可能已经注意到,此代码将不起作用,因为a
尝试使用b
和c
,但稍后会实例化它们。
我创建了一个小片段,您可以复制粘贴并尝试一下。
internal class A
{
public A(B b, C c)
{
this.b = b;
this.c = c;
}
private B b;
private C c;
public void Foo()
{
b.GetSomeData(); // and use it
}
public void Bar()
{
c.GetSomeData(); // and use it
}
public object GetSomeData()
{
return null;
}
}
// #####################################################################################
internal class B
{
public B(C c)
{
this.c = c;
}
private C c;
public void DoSomething()
{
c.GetSomeData(); // and use it
}
public object GetSomeData()
{
return null;
}
}
// #####################################################################################
internal class C
{
public C(A a, B b)
{
this.a = a;
this.b = b;
}
A a;
B b;
public void DoSomething()
{
a.GetSomeData(); // and use it
b.GetSomeData(); // and use it
}
public object GetSomeData()
{
return null;
}
}
// #####################################################################################
internal class Master
{
public Master()
{
a = new A(b, c);
b = new B(c);
c = new C(a, b);
}
public A a;
public B b;
public C c;
}
// #####################################################################################
internal class Program
{
private static void Main(string[] args)
{
Master m = new Master();
// random usage of m
m.a.Foo();
m.b.DoSomething();
m.a.Bar();
m.c.DoSomething();
m.a.Foo();
}
}
解决此问题的一种可能方法是创建一个类似构造函数的Init
方法,但我以后可以调用它。
代替写作
public A(B b, C c)
{
this.b = b;
this.c = c;
}
我去
public void Init(B b, C c)
{
this.b = b;
this.c = c;
}
对于大师班
internal class Master
{
public Master()
{
a = new A();
b = new B();
c = new C();
a.Init(b, c);
b.Init(c);
c.Init(a, b);
}
public A a;
public B b;
public C c;
}
我可以使用“更好”的方式吗?