比方說,我們有這兩個類:C#反思和繼承
public class Base
{
public static int GetInt() { return 1; }
}
public class Derived : Base
{
}
讓我們也說了一段代碼調用Derived.GetInt()。我怎麼能從GetInt()中知道它是Derived.GetInt()而不是Base.GetInt()被調用?我使用什麼反射技術?
比方說,我們有這兩個類:C#反思和繼承
public class Base
{
public static int GetInt() { return 1; }
}
public class Derived : Base
{
}
讓我們也說了一段代碼調用Derived.GetInt()。我怎麼能從GetInt()中知道它是Derived.GetInt()而不是Base.GetInt()被調用?我使用什麼反射技術?
有沒有辦法分辨出來,用反射或以其它方式。這些調用是完全相同的,編譯時,已經在MSIL級別沒有區別。
我不認爲你這樣做,因爲有是沒有Derived.GetInt。 GetInt是一個靜態成員,儘管您通過Derived引用它,但它只屬於Base。
由於該方法GetInt是一個靜態方法,而不是一個實例方法,它總是會從基類調用。你不能從派生類真正地調用它,因爲你不是從一個實例調用它。
如果您希望根據調用方法的類具有不同的功能,則可以執行此操作。
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;
}
}
最好把靜態方法簡單地看作全局函數。類名稱用作擴展名稱空間。