버그 해결을 위한 모든 질문을 던져
0 votes
618 views
public class TestAA
{
}

public class TestBB
{
   public TestAA aaa;
}

public class TestCC
{
   public TestAA aaa;
}

 

이런 식으로 TestBB가 aaa를 들고 있다고 할 때

aaa 입장에서

자기를 들고 있는 클래스가 TestBB인지 TestCC 인지 알아낼 수 있는 방법이 있을까요?
asked (6 point) , 618 views

4 answers

0 votes
닷넷에 리플렉션이라는게 있습니다.

http://rapapa.net/?p=2550

참고해보세요~
answered (97 point)
0 votes
해당 방법은 없을겁니다 그냥 set property 따로 정의 하셔서 해당 변수에 값넣을때 this 를 셋해주시는게 그나마 할수 있는 방법일 겁니다
answered (55 point)
0 votes

aaa.GetType(), 또는 typeof(TestAA)

 


if( aaa.GetType() == typeof(TestAA) )
{
 // aaa는 TestAA
}
answered (12 point)
aaa가 TestAA냐를 알아내는 질문이 아닌데요...
아 그러네요..

 

저런경우 그냥 내부 선언시에 Generic 으로 부모타입을 던져주지 않는이상

리플렉션밖에 답이 없을텐데 정말 비효율적이겠어요.
0 votes

가장 권장되는 방법은 프로퍼티나 생성자를 통해서 부모 객체를 넣어주는 방법이 있습니다.

public class TestAA
{
    public object Parent{get; set;}    

    public TestAA()
    {
    }

    public TestAA(object parent)
    {
        this.Parent = parent;
    }

    // Who is parent?
    public Type GetTypeParent()
    {
        return Parent.GetType();
    }
}

public class TestBB
{
    public TestAA aaa;

    void CreateAAA()
    {
        aaa = new TestAA();
        aaa.Parent = this;
    }
}

public class TestCC
{
    public TestAA aaa;

    void CreateAAA()
    {
        aaa = new TestAA(this);
    }
}

다른 방법으로는 리플렉션을 활용하는 방법이 있으며 해당 내용에 대해 stackoverflow에 답변이 있습니다.

https://stackoverflow.com/questions/34424787/reflection-to-get-parent-object

 

다만 부모 객체에 접근 한다는 것 자체가 순환 참조인 것이고 C#에서 순환 참조를 허용하고 있지만 그렇게 권장되는 방법은 아닙니다... 정말 필요한 게 아니라면 다른 방법을 찾아보세요.

answered (4 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

211 질문
329 answers
348 댓글
342 users