2010-06-02 10 views
10

여기에는 세 가지 클래스가 있습니다.내부 클래스의 외부 클래스 객체에 액세스 할 수 있습니까?

class A 
{ 
    public class innerB 
     { 
     //Do something 
     } 

    public class innerC 
     { 
     //trying to access objB here directly or indirectly over here. 
     //I dont have to create an object of innerB, but to access the object created by A 
     //i.e. 
      innerB objInnerB = objB; 
     //not like this 
      innerB objInnerB= new innerB(); 
     } 

private innerB objB{get;set;} **//Private** 

public A() 
    { 
    objB= new innerB(); 
    } 
} 

내가 클래스 A.에 의해 생성되는 클래스 C에서 B 클래스의 개체에 액세스 할 는 클래스 C에서 클래스 A의 객체에 변화를 만들기 위해 어떻게 든 가능 할 수 있습니까에 의해 클래스 A의 객체를 가져 아무튼 이벤트를 만들거나.

편집 : 위의 질문을 내 실수. (A)에 생성 된 B의 목적은 공공

가 가능 I는 A 등급으로 처리 할 수있는 이벤트를 발생시킬 수있게 될 얘기 할 경우 이벤트

를 작성하여이 작업을 수행 할 수 있나요없는 개인이며, 다음 내 문제가 될 수 있습니다 해결되었습니다.

+3

대부분의 코드를 작성 했으므로 Visual Studio에 덤프하고 직접 사용해 보지 않으시겠습니까? –

+0

@ Justin : Thx ur 도움을 위해 이미 VS에서이 작업을 수행하려고합니다. 나는 단지 내가 현재 원하는 상황에서 내 100 줄의 코드를 요약했다. 해결책이 있으면 제안 해주세요. 다른 클래스에 의해 제기 된 내 이벤트에서 A의 객체에 액세스해야하고 innerC에서 캡처되고 있습니다. –

답변

15

올바르게 읽으면 innerC 내에서 클래스 A의 objB 속성에 액세스하지 않고 액세스하려고합니다. C# nested classes are like C++ nested classes, not Java inner classes

당신은 innerC에서 A.objB에 액세스하려면 다음 어떻게 든 innerC에 클래스 A를 통과해야 할 것 :

이이 문서에 설명 된대로 C# 내부 클래스가 작동하지 않을 방법이다.

+12

부모 클래스를 전달해야하지만 (내부 클래스는 없다) ** 내부 클래스 **는 부모. – dbkk

+0

downvote 주셔서 감사합니다. 또한 틀렸어. –

+2

C# 컴파일러에게 문의하십시오. [sample code] (http://pastebin.com/HwA6F2Ee). – dbkk

-1

클래스 B는 클래스 C와 동일한 범위 내에 있으므로, 즉 클래스 A 내에서 중첩 된 유형 B를 중첩 된 유형 C에서 인스턴스화하고 사용할 수 있습니다. 그럼 당신은 당신의 InnerClass 모든 메소드에 해당 참조를 사용할 수 있습니다

public class OuterClass 
{ 
    //OuterClass methods 

    public class InnerClass 
    { 
     private OuterClass _outer; 

     public InnerClass(OuterClass outer) 
     { 
      _outer = outer; 
     } 
    } 
} 

:

+0

그가 원하는 것을 생각하지 않습니다. 바로 읽는다면 objB 속성에 액세스하려고합니다. innerC 내의 클래스 A는 그것을 따라갈 필요가 없습니다. –

7

당신처럼, 아마도 생성자에서, InnerClassOuterClass의 참조를 전달해야합니다.

+0

클래스 C의 개체 컬렉션을 가진 클래스 B에서 핸들이 정의 된 일부 사용자 정의 컨트롤에서 발생시킨 이벤트에서이 작업을 수행하려고합니다. –

+0

이벤트 인수가 필요한 객체에 대한 참조를 보유 할 수 있습니까? – dlras2

+0

나는 그 사건이 Class C의 콜렉션을 포함하는 B 클래스에 의해 잡혀있는 Collection에 다시 바인딩 된 사용자 정의 컨트롤에 의해 제기되었으므로 그렇게 생각하지 않는다. 나는이 순간에 조금 혼란 스럽다는 것을 알고있다. –

관련 문제