【问题标题】:How to design these classes the best way?如何以最好的方式设计这些类?
【发布时间】:2013-12-11 00:34:38
【问题描述】:

我有一个问题,如何在一个好的(更好的)模型中设计以下案例(我正在使用 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() 的可能性。

我怎样才能做到这一点?我想我的班级结构并不完美,但我不知道如何改变它以使其正常工作。

【问题讨论】:

  • 不清楚外部类和嵌套类之间的关系是什么 - 您的示例根本没有关系,因此显然不可能调用外部类的实例方法(与任何其他 2 个不相关的类相同) .也许您期望实例之间存在某种父/子关系?也许是继承?
  • 你应该考虑在这个例子中用真实姓名编写你的类。老实说,很难确切地确定您的问题是关于什么的。我认为您试图询问如何让内部类调用其父类的成员,在这种情况下@Tony 已经回答了您的问题(注入父类,或者至少是指向所需函数的指针)。
  • 您能否举一个小例子说明“注入指向所需函数的指针”的含义?

标签: c# oop inner-classes


【解决方案1】:

您可以将对 prent 类的引用传递给您的所有子类,如下所示:

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();

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多