2014-11-24 180 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