2010-03-15 2 views
3

값이 null 인 개체의 부모 클래스는 어떻게 얻을 수 있습니까? 예를 들어 null 개체의 부모 클래스 가져 오기 (C# Reflection)

...

ClassA 클래스가 생성 될 때의 값으로 설정되지 int? i를 포함한다.

그런 다음 코드의 일부 다른 부분에서 일부 기능에 대한 매개 변수로 i을 전달하고 싶습니다. 유일한 정보로 i을 사용하면 ClassA이 "소유하고 있음"을 알 수 있기를 원합니다. i.

ClassA에도 다른 개체가 들어 있기 때문에이 개체의 값을 위의 단락에서 언급 한 것과 같은 함수에서 호출하고 싶습니다.

도 할 수 없습니다 :

public class A 
{ 
    public class B 
    { 
     public int? i; 
     public int? j; 
    } 

    B classBInstance = new B(); 
    public string s; 
} 

{ 
    ... 
    A someClassAInstance = new A(); 
    ... 
    doSomething(someClassAInstance.classBInstance.i); 
    ... 
} 

public static bool doSomething(object theObject) 
{ 
    string s = /* SOMETHING on theObject to get to "s" from Class A */; 
    int someValue = (int)theObject; 
} 

답변

6

당신은 할 수 없습니다. A의 인스턴스를 doSomething으로 전달합니다.

+2

메소드는 항상 필요한 항목을 직접 요청해야합니다. 그들은 그들이 원하는 것을 얻을 수있는 것을 요구해서는 안됩니다. – kyoryu

+0

나는 당신과 의견이 다를 것입니다. 대체 시나리오는 완벽하게 합법적입니다. 그러나 위임의 범위와 호출의 원인은 명명에서 명확해야합니다. 그러나 당신이 공정한 시점을 만들고, 필요한 모든 것이 깃털이라면 닭 전체를 사지 말라. –

+0

대리인에 사용 중입니다. 기본적으로 파싱하고, 나는 그것이 "i"또는 "j"로 갈 곳을 통과 할 수 있어야합니다. 그렇다면 파싱의 일부는 i 또는 j가 중첩 된 클래스의 정보가 필요합니다. 어떻게 든 길을 가져야합니다 ... 객체를 만들면 메모리 공간을 예약하지 않습니까? 따라서 참조로 객체를 전달하면 해당 메모리 위치가 전달됩니다. 그 메모리 위치는 어떻게 든 클래스로 해결 될 수 있어야하는 다른 메모리 위치에 묶여 야합니다. – Nick

3

class A은 구성원의 부모 (기본)가 아닙니다. 그들의 소유자.

그러므로 doe 주위에 int 또는 int?을 전달하면 원하는 정보를 입력 할 필요가 없습니다.

0

대신에 사전이나 keyvaluepairs를 사용하여 int가 "s"와 그렇게 연결되어 있습니까? 문제는 int가 어떤 객체를 소유하고 있는지 인식하지 못한다는 것입니다.

2

메서드에 보내는 매개 변수에는 원래 어떤 개체가 왔는지 확인하는 데 사용할 수있는 정보가 없습니다. 메소드로 보내지는 것은 객체에 boxed 된 nullable int의 복사본입니다.

그래서 당신이 요구하는 것은 불가능합니다. 이와 같은 작업을 수행하는 유일한 방법은 호출 스택을 분석하여 호출 메소드를 찾은 다음 해당 메소드의 코드를 분석하여 매개 변수 값의 가져온 위치를 결정하는 것입니다.

0

클래스 B의 멤버 인 'i'를 전달하기 때문에 불가능합니다. 그러나 클래스 B는 클래스 A의 인스턴스에 대한 참조를 보유하지 않습니다. 인스턴스는 's'의 값을 가져와야합니다. 그것의 비 정적 필드.

관련 문제