2014-11-24 146 views
-2

真的很愚蠢的问题,我有私有变量,我封装,现在我想从另一个类访问它们。从另一个类访问类方法/变量

我也在一个类中有一个列表,并想要很多类来访问该列表(称为字段的对象列表)(创建一个简单的农场模拟器)。 那么如何从另一个班级访问他们呢?

  1. 我知道我可以做一个类的instace,但名单,将意味着我的名单将是不一样的,当我创造,我要访问的类的类的实例列表中?

  2. 我不认为我可以使用Namespace.class.Something,因为它们不是静态的,或者我可以吗?

  3. 也许使用继承列表或是不会工作?

请帮助,realllyyy将不胜感激任何帮助! *预先感谢您

+1

阅读有关[属性](http://msdn.microsoft.com/en-我们/库/ x9fsa0sw.aspx)。 – 2014-11-24 09:54:00

+0

?你是否打算阅读我的问题 – 2014-11-24 09:56:18

+0

我知道这一点,但我也得到了名单,如果我创建了很多实例,它们会不会有所不同,看看你是否读过这个问题,你可能会看到我的问题 – 2014-11-24 09:57:32

回答

0

您不能从另一个类中访问私有成员(成员是嵌套类的成员除外)。所以Konrad Kokosa提出的使用Properties的提议非常好,因为它们应该用于控制来自实际课程之外的访问。说到这一点,您可以将该属性的访问修饰符变为public或从该类派生(然而,您必须对该属性使用受保护的访问)。

MyClass { 
    public static List<Field> MyList {get;set;} 
} 

AnotherClass { 

    AnotherClass() { 
     MyClass.MyList = // whatever 
     // or also possible 
     MyClass.MyList.Add(/*new Item*/); 
    } 
} 
+0

我知道,我知道我可以像那样访问它们,而且我可能会这样做,但是如果我创建列表类的很多实例,那么列表中的列表将不会在每个实例中不同,还是我错了? – 2014-11-24 10:02:53

+0

public static IList Fields = new List (); – 2014-11-24 10:04:11

+0

@KlaudijusMiseckas查看我的更新代码,其中包含一个静态属性 – HimBromBeere 2014-11-24 10:06:52

0

私人成员不能在课堂外使用(除非你使用反射,我不会推荐)。如果你想让这些成员在课外上课,你必须让他们“公开”。如果您希望您的成员仅对所有派生类可用,请使用“受保护”。

0

如果您要访问的所有O其他类相同的列表,你应该把它声明为静态:

private static List<Field> s_fields = new List<Field>(); 
public static List<Field> Fields { get { return s_fields; } } 
+0

嗯,谢谢我会尝试的,你认为使用这是好的做法还是坏的,(使用静态) – 2014-11-24 10:08:55

+0

不是一个好的做法,一般 - 但这是一个非常广泛的问题,取决于你的喜好,您现有的框架 – ShayD 2014-11-24 10:11:25

+0

非常感谢 – 2014-11-24 10:33:15