它們只能從一個類派生,但這並不意味着任何基類都不是從另一個基類派生的,除非它是System.Object
。如果你可以確定Base類(你可以使用反射)並且將它作爲基類(你可以使用反射),那麼你在運行時會獲得什麼?
如果您試圖訪問一個基類的方法/屬性在派生類中沒有提供,有可能是一個很好的原因,它不是在派生類型可用。如果你決定這樣做,我不認爲你需要投射它,你可以簡單地獲得基本類型,找到基本類型的方法/屬性並在派生類型上調用它們。
using System;
using System.Reflection;
namespace BaseTypetest
{
class Program
{
static void Main(string[] args)
{
BaseClass2 class2 = new BaseClass2();
Console.WriteLine(class2.Value.ToString());
Type baseClass = class2.GetType().BaseType;
Console.WriteLine(baseClass.FullName);
PropertyInfo info = baseClass.GetProperty("Value");
if (info != null)
{
Console.WriteLine(info.GetValue(class2, null).ToString());
}
Console.ReadKey();
}
}
public class BaseClass1 : Object
{
public BaseClass1()
{
this.Value = 1;
}
public int Value { get; set; }
}
public class BaseClass2 : BaseClass1
{
public BaseClass2()
{
this.Value = 2;
}
public new int Value { get; set; }
}
}
結果:
2
BaseTypetest.BaseClass1
1
不要相信。你總是最終在System.Object。 – Plymouth223
你應該看到:http://stackoverflow.com/questions/1524562/to-get-parent-class-using-reflection-on-c-sharp這可能會回答你的問題。 – Andre
另外,你的意思是內置於語言或你可以寫的東西嗎? – Plymouth223