我有一个问题,如何在一个好的(更好的)模型中设计以下案例(我正在使用C#): 到目前为止,它是这样的:
public class ExampleClass
{
private object ExampleClassPrivate;
public SubExampleClass SubExampleClassPublic;
-------
public void ChangeExampleClassPrivate()
{
ExampleClassPrivate = "SOMETHING";
}
private class SubExampleClass
{
private object SubExampleClassPrivate;
public SubSubExampleClass SubSubExampleClassPublic;
.
.
.
}
public class SubSubExampleClass
{
...
public void DoSomething()
{
//Do something within SubSubExampleClass
//In the end: call ChangeExampleClassPrivate()
}
}
}
我可以做以下事情: 我创建了一个ExampleClass的实例,我们称之为“TestInstance”。 然后:
TestInstance.SubExampleClassPublic.SubSubExampleClassPublic.DoSomething();
TestInstance.ChangeExampleClassPrivate();
但我不希望在DoSomething()之后手动执行ChangeExampleClassPrivate()。我希望有可能从DoSomething()内部调用ChangeExampleClassPrivate()。
我怎么能实现这个目标?我想我的班级结构并不完美,但我不知道如何改变它以正确的方式工作。
答案 0 :(得分:0)
您可以将对父类的引用传递给所有子类,如下所示:
private class SubExampleClass
{
private object SubExampleClassPrivate;
private readonly SubSubExampleClass SubSubExampleClassPublic;
private readonly ExampleClass parent;
public SubExampleClass(ExampleClass parent)
{
// save reference to the parent object
this.parent = parent;
// pass it to subclass
SubSubExampleClassPublic= new SubSubExampleClass(parent)
}
.
.
.
}
public class SubSubExampleClass
{
private readonly ExampleClass parent;
public SubSubExampleClass(ExampleClass parent)
{
this.parent = parent; // save reference to the parent object
}
public void DoSomething()
{
//Do something within SubSubExampleClass
parent.ChangeExampleClassPrivate;
}
}
一个用法,在Example Class中的某个地方:
var instance = new SubExampleClass(this);
instance.SubSubExampleClassPublic.DoSomething();