C# 如何以最佳方式设计这些类?
我有一个问题,如何在一个好的(更好的)模型中设计以下案例(我使用的是C#): 到目前为止,情况是这样的:C# 如何以最佳方式设计这些类?,c#,oop,inner-classes,C#,Oop,Inner Classes,我有一个问题,如何在一个好的(更好的)模型中设计以下案例(我使用的是C#): 到目前为止,情况是这样的: public class ExampleClass { private object ExampleClassPrivate; public SubExampleClass SubExampleClassPublic; ------- public void ChangeExampleClassPrivate() { Exam
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()
}
}
}
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;
}
}
我可以做到以下几点:
我创建了ExampleClass的一个实例,我们称之为“TestInstance”。
然后:
但是我不想在DoSomething()之后一直手动执行ChangeExampleClassPrivate()。我寻找从DoSomething()内部调用ChangeExampleClassPrivate()的可能性
我怎样才能做到这一点?我想我的类结构并不完美,但我不知道如何才能改变它以正确的方式工作。您可以将对prent类的引用传递给所有子类,如下所示:
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()
}
}
}
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;
}
}
还有一个用法,在ExampleClass中的某个地方:
var instance = new SubExampleClass(this);
instance.SubSubExampleClassPublic.DoSomething();
不清楚外部类和嵌套类之间的关系是什么-您的示例根本没有显示任何关系,所以显然不可能调用外部类的实例方法(与任何其他两个不相关的类相同)。也许您希望实例之间存在某种父/子关系?也许继承?你应该考虑为这个例子用真实的名字写你的类。老实说,很难确定你的问题是关于什么的。我想你是想问如何让内部类调用其父类上的成员,在这种情况下@Tony已经回答了你的问题(注入父类,或者至少是一个指向所需函数的指针)。你能举一个小例子说明“注入指向所需函数的指针”的意思吗?