C#嵌套类访问父成员
是否可以访问子类中的父成员C#嵌套类访问父成员,c#,oop,C#,Oop,是否可以访问子类中的父成员 class MainClass { class A { Whatever } class B { List<A> SubSetList; public void AddNewItem(A NewItem) { Check MasterListHere ???? } } List<A> MasterList; } class类main类{ A类{无论什么} B类{ 列表子列表; pub
class MainClass {
class A { Whatever }
class B {
List<A> SubSetList;
public void AddNewItem(A NewItem) {
Check MasterListHere ????
}
}
List<A> MasterList;
}
class类main类{
A类{无论什么}
B类{
列表子列表;
public void AddNewItem(新项){
在这里查看主列表????
}
}
列表主列表;
}
所以。。。我的主课将有一个总名单。它还将有一组B的实例。在每个B的实例中,我想向特定的B添加新的a,但前提是它们存在于主列表中。我玩弄了使主列表保持静态,它工作了。。。直到我有多个MainClass实例。。。我会的
我可以将对MasterList的引用传递给B的每个实例,但我最终会有多个这样的“MasterList”,如果不需要的话,我不想传递太多引用。无论是否将B类嵌套在a类中,任何给定的A实例仍然需要知道它所持有的B实例。因此,您可能希望使用对B的引用初始化A,并将其保留在字段中。这可能包括取消嵌套。根据您的定义,
类B
的实例可以访问类MainClass的私有方法和静态字段是的,但您需要从B实例中引用MainClass的实例
你有没有想过重新上课?I除了在B中有AddNewItem方法外,您还可以在MainClass中有它。这样就很容易从MainClass中查看主列表。您可以使用以下内容:
class B {
private MainClass instance;
public B(MainClass instance)
{
this.instance = instance;
}
List SubSetList;
public void AddNewItem(A NewItem) {
Check MasterListHere ????
}
}
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;
}
这可能适合您:
public void AddNewItem(A newItem, Func<A, bool> checkForItemInMasterList)
{
if (checkForItemInMasterList.Invoke(newItem)
SubList.Add(newItem);
}
总而言之,它可能是这样的:
class B {
private MainClass instance;
public B(MainClass instance)
{
this.instance = instance;
}
List SubSetList;
public void AddNewItem(A NewItem) {
Check MasterListHere ????
}
}
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;
}
class类main类{
A类{无论什么}
B类{
列表子列表;
public void AddNewItem(一个newItem,Func checkForItemInMasterList)
{
if(checkForItemInMasterList.Invoke)(newItem)
子列表.添加(新项);
}
}
//我不知道您如何将项添加到B的实例中。
//这纯粹是推测。
公共无效附加项(新项)
{
new B().AddNewItem(newItem,x=>MasterList.Contains(x));
}
列表主列表;
}
在C#中,实际上没有对封闭类实例的隐式引用,因此需要传递这样的引用,一种典型的方法是通过嵌套类的构造函数来传递引用。但是仍然需要传递对instance@Jeremy:在编辑过程中发现我:)我也认为。。。是否有一个访问修饰符可以限制对嵌套类的访问?一种方法是将所有这些数据结构放入它们自己的程序集中,并使用内部而不是私有。我考虑过这一点,但这并不阻止其他类访问此列表。这不是超级关键,但我希望这是尽可能干净的…然后我认为Alex的解决方案可以。问题是,我将有多个B实例,我将添加一个项目…我正在考虑做类似的事情,但也包括对B的引用。。所以public void AddItem(B list,A item){}..@Rob多个实例都可以,在这种情况下,您只需更改在Main类中添加项的方式,但这样您就不必担心B知道您的主列表。这是一个遗憾,因为这意味着类也不是namspace,与C++不同,为什么这个精确的答案比接受的答案少,这不能解释任何事情,我们必须实际阅读和解释代码示例来理解解决方案吗?