引用属性

时间:2011-12-05 16:00:58

标签: c#

假设我有这段代码

public class Class1 
{
      List<Class2> myClass2List = new List<Class2>;
      public Class1() { } 
}

public class Class1List : List { }

public class Class2 
{
   public Class2() { };

   //Class2 objects will sit in a list that is an attribute of a Class1 object
   // class1 objects will be in a list that is an attribute of a Class3 object
   // is it possible for this method to access the  list in the Class3 object
   // without passing the list as a parameter.
   public void myClass2Method(){ }
}

public class Class3 
{
    Class1List myList = new Class1List();
    public Class3(){ }

    static void Main() 
    {
        Class3 myClass3Var = new Class3();
        // do something to fill myList;
         //  added some code to maybe make it a bit less muddy
        foreach (Class1 c1 in this.Class1List){
           foreach (class2 c2 in c1.myClass2List{
           // here is where I want to reference the Class1List attribute of the
           /// Class3 object - do I need to pass the list as a paramter?
           c2.MyClass2Method();
       }

     }
    }

}

现在假设我在Class3的实例中的myList中有一个Class2实例。 Class2方法myClass2Method()是否有可能访问myList wouthout并将列表作为参数传递?

5 个答案:

答案 0 :(得分:0)

不是。如果你考虑一下,2级就坐在那里。它不知道有一个列表在某个地方引用了它,因此无法获得对该列表本身的引用。

答案 1 :(得分:0)

你问的是一个班级是否可以访问兄弟姐妹。简而言之:不。

类只能访问自己及其中的类型/值。类无法访问构造它们的范围(可以将其视为父范围)。如果无法访问父级,则无法访问兄弟,这将是发生的另一个对象,将在同一父范围内构建。

答案 2 :(得分:0)

我相信你实际上是在询问实例是否可以访问包含它的列表。如果这是正确的那么不,不是没有通过明确的引用。你想解决什么具体问题?

答案 3 :(得分:0)

你可以,但你不想。 您可以将成员添加到Class1List类型的class2中,当您将class2的实例添加到mylist时,您可以将所述成员设置为mylist,而不是使用函数中的本地成员。 但是这样做对你不利,不要这样做,你的设计是错误的,你需要问一个不同的问题(如何设计 _ __ _ _ )。

答案 4 :(得分:0)

如果您声明

Class1List myList = new Class1List();

作为

internal Class1List myList = new Class1List();

然后,如果第2类和第3类在同一名称空间中,则第2类可以访问它。