使用反射从基类投射回派生类

本文关键字:派生 基类 反射 | 更新日期: 2023-09-27 18:29:44

我要做的是:

BaseClass base = (BaseClass)
AppDomain.CurrentDomain.CreateInstance("DerivedClassDLL","DerivedClass");

但是,我需要从DerivedClass访问一个属性来显示,等等。BaseClass没有这个属性,我无法实现它。

所以不知怎么的,我需要把它投射回DerivedClass来访问它,但DerivedCClass没有被引用,所以我不能很容易地访问它。这是一种不同于BaseClass的类型,BaseClass有引用,所以我们可以使用它。

我怎样才能做到这一点?

使用反射从基类投射回派生类

在这种情况下,您基本上有两个选项:

  • 使用动态
  • 使用反射

使用动态

BaseClass foo = (BaseClass) AppDomain.CurrentDomain
                                     .CreateInstance("DerivedClassDLL","DerivedClass");
dynamic derived = foo;
string someProperty = derived.SomeProperty;

使用反射

string someProperty = (string)foo.GetType()
                                 .GetProperty("SomeProperty")
                                 .GetValue(foo, null);

由于您有派生类的实例,所以这一点反射应该可以做到:

var myPropertyInfo = typeof(instanceOfDerivedClass).GetProperty("DerivedClassProperty");
var myPropertyValue = myPropertyInfo.GetValue(instanceOfDerivedClass) as [property type];