是否可以访问子类中的父成员...
class MainClass {
class A { Whatever }
class B {
List<A> SubSetList;
public void AddNewItem(A NewItem) {
Check MasterListHere ????
}
}
List<A> MasterList;
}
所以...我的主要课程将有一个主列表。它也会有一堆B实例。在B的每个实例中,我想向特定的B添加新的A,但只有它们存在于主列表中。我玩弄MasterList是静态的,它可以工作......直到我有多个MainClass实例......我将拥有它。
我可以将对MasterList的引用传递给B的每个实例,但我最终会有多个这些“MasterLists”,如果我不需要,我不想传递大量的引用。
答案 0 :(得分:25)
您可以使用以下内容:
class B {
private MainClass instance;
public B(MainClass instance)
{
this.instance = instance;
}
List SubSetList;
public void AddNewItem(A NewItem) {
Check MasterListHere ????
}
}
答案 1 :(得分:24)
在C#中,实际上没有对封闭类的实例的隐式引用,因此您需要传递这样的引用,并且通过嵌套类的构造函数执行此操作的典型方法。
答案 2 :(得分:5)
根据您的定义,class B
的实例可以访问class MainClass
的私有方法和静态字段。
答案 3 :(得分:1)
无论你是否在A类中嵌套B类,A的任何给定实例仍然需要知道它所持有的B实例。因此,您可能希望使用对B的引用初始化A并将其保留在字段中。这可能包括取消嵌套。
答案 4 :(得分:1)
是的,但您需要在B实例中引用MainClass实例。
你有没有想过重新上课?如果在B中使用AddNewItem方法,您可以在MainClass中使用它。这样就可以很容易地从MainClass中检查MasterList。
答案 5 :(得分:1)
这可能对您有用:
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;
}