2010-03-15 34 views
3

如何獲取具有null值的對象的父類?獲取空對象的父類(C#反射)

例如...

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 2010-03-15 09:31:54

+0

我不得不不同意Kyoryu的觀點,通過委託作爲後備場景是完全合法的。雖然委託的範圍和調用的原因應該在命名中清楚。但是你確實公平一點,如果你可能需要的只是一個羽毛,就不要購買整隻雞。 – 2010-03-15 10:47:54

+0

它在代表中使用。基本上解析,我需要能夠傳遞到「i」或「j」的地方。然後,一些解析需要我或j嵌套在類中的信息。必須有某種方式......當你創建一個對象時,它不會保留內存空間嗎?因此,通過引用傳入一個對象將傳入該內存位置。該內存位置應該綁定到一些其他內存位置,應該能夠以某種方式解析到類... – Nick 2010-03-15 13:54:20

3

class A不是其成員的父(基)。只是他們的持有人

所以你不能做你想做的事,通過一個intint?左右doe不涉及任何關於類的信息。

0

不能使用字典或keyvaluepairs,以便int連接到「s」那樣嗎?問題是int不知道哪個對象擁有它。

2

發送到該方法的參數不包含任何可用於確定它最初來自哪個對象的信息。發送給該方法的內容僅僅是可空對象的一個​​副本,裝在一個對象中。

所以你所要求的是不可能的。做這樣的事情的唯一方法是分析調用堆棧以找到調用方法,然後分析該方法中的代碼以確定參數值從哪裏獲取。

0

它是不可能的,因爲您傳遞的是'我',它是類B的成員。但是類B不持有對類A的實例的引用。需要一個實例來獲取's'的值,因爲它是一個非靜態的領域。