引用属性
本文关键字:属性 引用 | 更新日期: 2023-09-27 18:16:46
假设我有这样的代码
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();
}
}
}
}
现在假设我在myList的Class3实例中有一个Class2实例。是否有可能为Class2方法myClass2Method()访问myList而不传递列表作为参数?
你可以,但你不想。您可以向Class1List类型的class2添加成员,当您向mylist添加class2的实例时,您可以将该成员设置为mylist,然后在函数中使用本地成员。但是这样做对你不好,不要这样做,你的设计是错误的,你需要问一个不同的问题(如何设计_____)。
不是。如果你想一下,二班就坐在那里。它不知道在某个地方有一个引用它的列表,因此无法获得对该列表本身的引用。
你在问一个类是否可以访问它的兄弟。总之:No.
类只能访问自己和其中的类型/值。类不能访问构造它们的作用域(可以认为是它们的父作用域)。如果不能访问父类,就不能访问兄弟类,兄弟类就是在同一父类作用域中构造的另一个对象。
我相信你实际上是在问一个实例是否可以访问包含它的列表。如果这是正确的,那么不,不传递一个显式引用。你想解决的具体问题是什么?
如果声明
Class1List myList = new Class1List();
internal Class1List myList = new Class1List();
如果类2和类3在同一个命名空间,那么类2可以访问它