2009-07-15 54 views
0

比方說,我們有這兩個類:C#反思和繼承

public class Base 
{ 
    public static int GetInt() { return 1; } 
} 

public class Derived : Base 
{ 

} 

讓我們也說了一段代碼調用Derived.GetInt()。我怎麼能從GetInt()中知道它是Derived.GetInt()而不是Base.GetInt()被調用?我使用什麼反射技術?

回答

0

有沒有辦法分辨出來,用反射或以其它方式。這些調用是完全相同的,編譯時,已經在MSIL級別沒有區別。

0

我不認爲你這樣做,因爲有沒有Derived.GetInt。 GetInt是一個靜態成員,儘管您通過Derived引用它,但它只屬於Base。

0

由於該方法GetInt是一個靜態方法,而不是一個實例方法,它總是會從基類調用。你不能從派生類真正地調用它,因爲你不是從一個實例調用它。

0

如果您希望根據調用方法的類具有不同的功能,則可以執行此操作。

void Main() 
{ 
    Console.WriteLine(Base.GetInt()); // 1 
    Console.WriteLine(Derived.GetInt()); // 2 
} 

public class Base 
{ 
public static int GetInt() 
{ 
    return 1; 
} 
} 

public class Derived : Base 
{ 
    public static int GetInt() 
    { 
    return 2; 
    } 
} 
0

最好把靜態方法簡單地看作全局函數。類名稱用作擴展名稱空間。