它们只能从一个类派生,但这并不意味着任何基类都不是从另一个基类派生的,除非它是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