2011-06-10 5 views
0

C#의 클래스간에 데이터를 공유해야합니다. 충분히 쉽게 들립니다. 클래스의 데이터로로드 된 컬렉션이 있습니다. 다음과 같이 정의한다고 가정 해 보겠습니다.C#에서 다른 클래스의 데이터에 어떻게 액세스합니까?

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

이제 다른 클래스에서 DataCollection을보고 싶습니다. 두 클래스 모두 동일한 네임 스페이스에 있습니다. AppAdmin.DataCollection이 작동하지 않습니다. 도울 수 있니?

+5

시작하기 –

+0

'AppAdmin.DataCollection'에 의해'AppAdmin'에 접근하려고합니까? 클래스의 비 정적 멤버에 액세스 할 수 없기 때문에 작동하지 않는다면 AppAdmin의 _instance_를 통해 액세스해야합니다. –

+0

예, 객체 지향 프로그래밍은 절차 적 프로그래밍보다 약간 더 이해하기가 어렵습니다. 그러나 당신은 그것의 걸림 새를 얻을 것이다. –

답변

7

당신은 설계 허용하는 경우, 당신은 DataCollection 정적

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

을 할 수

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

또는 DataCollection 액세스 할 수 AppAdmin의 인스턴스를 가지고 있고 당신이 언급으로 당신은 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.DataCollection에 액세스하려면 AppAdmin의 인스턴스가 필요합니다.

따라서, 어떤 시점에서 기준 특정 인스턴스 AppAdmin.DataCollection 액세스 할 수 있도록 (AppAdmin 유형의 변수 또는 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 

이 필요합니다.

좀 더 간단하게 넣어 보자 :

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

DogLegs있다. 특정 DogLegs을 얻으려면 Legs에 대한 요청을 받으려면 Dog의 인스턴스가 필요합니다.

마찬가지로, AppAdminDataCollection입니다. 해당 DataCollection에 대한 요청을 받으려면 AppAdmin의 특정 인스턴스가 필요합니다.

따라서 인스턴스 멤버 (필드, 속성 또는 메소드)에 액세스하려면 요청을 수신하기 위해 인스턴스 객체가 필요합니다.

0

어쩌면 당신은 그것을 정적으로 만들고 싶습니다. ? 데이터가 연결되어있는 경우

public static ObservableCollection<Data> DataCollection; 

: 데이터 그냥 항상 객체의 특정 인스턴스의 외부에서 사용할 수 있어야하는 경우

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

은 그것을 static을,

... 따라 다릅니다 객체의 인스턴스에 연결하면 클래스가 아닌 인스턴스에서 액세스합니다.

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

그러나 과 값의 차이점을 명심하십시오. 그것은 배울 중요한 주제입니다. 두 가지를 섞으려고하면 종종 이상한 버그가 생깁니다.

3

모양에 따르면 정적 멤버와 같은 인스턴스 멤버에 액세스하려고합니다. 정적 멤버는 클래스/유형에 연결되고 인스턴스 멤버는 객체에 연결됩니다. 위와 같이 "DataCollection"에 액세스하려는 경우 먼저 AppAdmin 객체를 만들어야 액세스 할 수 있습니다.

시도해보십시오.

var aAdmin = new AppAdmin(); 
var collection = aAdmin.DataCollection; 
관련 문제