使用反射从基类投射回派生类
本文关键字:派生 基类 反射 | 更新日期: 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];