Они могут быть получены только из одного класса, но это не значит, что ни один базовый класс также не был получен из другого базового класса, если он не System.Object
.Если бы вы могли определить базовый класс (вы можете использовать отражение) и вы превратили его в базовый класс (вы могли бы использовать отражение), что бы вы получили во время выполнения?
Если вы пытаетесьчтобы получить доступ к методу / свойству базового класса, недоступному в производном классе, вероятно, есть очень веская причина, по которой он недоступен в производном типе.Если вы полны решимости сделать это, я не думаю, что вам нужно его приводить, вы можете просто получить базовый тип, найти метод / свойства базового типа и вызвать их для производного типа.
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