代码之家  ›  专栏  ›  技术社区  ›  Rob

C#嵌套类访问父成员[重复]

  •  31
  • Rob  · 技术社区  · 15 年前

    是否可以访问子类中的父成员。。。

    class MainClass {
      class A { Whatever }
    
      class B {
        List<A> SubSetList;
    
        public void AddNewItem(A NewItem) {
           Check MasterListHere ????
        }
      }
    
      List<A> MasterList;
    }
    

    所以我的主课将有一个总名单。它还将有一组B的实例。在每个B的实例中,我想向特定的B添加新的a,但前提是它们存在于主列表中。我玩弄了使主列表保持静态,它工作了。。。直到我有多个MainClass实例。。。我会的。

    我可以将对主列表的引用传递给B的每个实例,但我最终会有多个这样的“主列表”,如果不需要的话,我不想传递很多引用。

    6 回复  |  直到 15 年前
        1
  •  53
  •   Jpsy    13 年前

        2
  •  28
  •   Oleks    15 年前

    您可以使用以下内容:

    
    class B {
        private MainClass instance;
    
        public B(MainClass instance)
        {
            this.instance = instance;
        }
    
        List SubSetList;
    
        public void AddNewItem(A NewItem) {
           Check MasterListHere ????
        }
      }
    
        3
  •  5
  •   Steve Guidi    15 年前

    根据您的定义 class B class MainClass .

        4
  •  1
  •   Steven Sudit    15 年前

        5
  •  1
  •   Jeremy    15 年前

    是的,但是您需要从B实例中引用MainClass实例。

    你有没有想过重新上课?I除了在B中有AddNewItem方法外,您还可以在MainClass中有它。这样就很容易从MainClass中检查主列表。

        6
  •  1
  •   Joseph    15 年前

    这可能适合您:

    public void AddNewItem(A newItem, Func<A, bool> checkForItemInMasterList)
    {
        if (checkForItemInMasterList.Invoke(newItem)
            SubList.Add(newItem);
    }
    

    然后,您的MainClass中会有一些东西使用如下方法:

    public void AddItem(A newItem)
    {
        new B().AddNewItem(newItem, x => MasterList.Contains(x));
    }
    

    class MainClass {
      class A { Whatever }
    
      class B {
        List<A> SubSetList;
    
        public void AddNewItem(A newItem, Func<A, bool> checkForItemInMasterList)
        {
            if (checkForItemInMasterList.Invoke(newItem)
                SubList.Add(newItem);
        }
      }
    
      //I don't know how you're adding items to instances of B.
      //This is purely speculative.
      public void AddItem(A newItem)
      {
          new B().AddNewItem(newItem, x => MasterList.Contains(x));
      }
    
      List<A> MasterList;
    }