2011-06-10 68 views
0

我需要在C#中的類之間共享數據。聽起來很簡單。我有一個在一個類中加載數據的集合。假設它是這樣定義的:如何訪問C#中另一個類的數據?

public class AppAdmin: IApplicationThingy 
{ 
    public ObservableCollection<Data> DataCollection; 

現在,在另一個類中,我想看看DataCollection。這兩個類都在同一個命名空間中。 AppAdmin.DataCollection不起作用。你能幫我嗎?

+5

從哪裏開始? – 2011-06-10 19:54:37

+0

您是否試圖通過'AppAdmin.DataCollection'訪問'AppAdmin'?如果是這種情況,僅僅因爲無法訪問類的非靜態成員,您將不得不通過_instance_的'AppAdmin'來訪問它。 – 2011-06-10 19:55:17

+0

是的,面向對象編程比程序編程稍微難以理解。但你會得到它的訣竅。 – 2011-06-10 19:57:36

回答

7

你必須有AppAdmin的實例來訪問數據收集

var appAdmin = new AppAdmin(); 
var data = addAdmin.DataCollection; 

,或者如果設計允許,可以使數據收集靜態

public class AppAdmin: IApplicationThingy 
{ 
    public static ObservableCollection<Data> DataCollection; 

,然後根據你提到你可以訪問數據收集問題由

var data = AppAdmin.DataCollection; 
0

您必須實例化對象,然後調用數據字段。

AppAdmin aa = new AppAdmin(); 

aa.DataCollection; 
0

你需要有一個類的實例爲了訪問其成員。

爲了在實例共享數據,你需要圍繞它傳遞:

// in one object that needs the object 
var myAppAdmin = new AppAdmin(): 
var myData = myAppAdmin.DataCollection; 

// call to another object, passing in the class 
myOtherClass.GetDataFromAppAdmin(myAppAdmin); 
2

AppAdmin.DataCollectionAppAdmin實例成員。這意味着您需要一個AppAdmin的實例來訪問AppAdmin.DataCollection以獲取特定實例。

因此,在某些時候需要參考(無論是通過AppAdmin類型的變量或計算結果的AppAdmin實例的表達),以能夠訪問AppAdmin.DataCollection特定實例。

所以,不知何故,好歹,你需要

AppAdmin appAdmin = // expression that evaluates to an instance of AppAdmin 
var dataCollection = appAdmin.DataCollection; 

var dataCollection = 
    (expression that evaluates to an instance of AppAdmin).DataCollection 

以獲取的AppAdmin特定實例AppAdmin.DataCollection參考。

讓我們把它更簡單地說:

class Dog { 
    public IEnumerable<DogLeg> Legs { get; set; } 
} 

一個DogLegs。爲了能夠獲得特定的DogLegs,您需要一個Dog實例來接收其Legs的請求。

同樣,AppAdminDataCollection。您需要一個特定的AppAdmin實例來接收其DataCollection的請求。

因此,要訪問實例成員(無論它是一個字段,屬性還是方法),您需要一個實例對象來接收請求。

0

也許你想讓它靜態?

public class AppAdmin: IApplicationThingy 
{ 
    static public ObservableCollection<Data> DataCollection; 
0

取決於...

如果數據只需要永遠是對象的任何特定實例的外部可用,只是使它static

public static ObservableCollection<Data> DataCollection; 

如果數據被捆綁到對象的實例,那麼您可以從實例訪問它,而不是從類訪問它:

var myObj = new AppAdmin(); 
myObj.DataCollection ... 

但請記住靜態實例值之間的差異。這是一個重要的學習主題。試圖混合兩者往往導致奇怪的錯誤。

3

通過它的外觀,你試圖訪問一個像靜態成員的實例成員。靜態成員附加到類/類型,而實例成員附加到對象。如果您正在尋找像上面那樣訪問「DataCollection」,則需要先創建一個AppAdmin對象,然後才能訪問它。

試試這個。

var aAdmin = new AppAdmin(); 
var collection = aAdmin.DataCollection; 
相關問題