【发布时间】:2016-03-17 16:58:50
【问题描述】:
我有一个现有的基类型,我想根据类型名称作为字符串将其转换为派生类型,所以像这样:
public void DoStuffInDerivedType(string derivedName) {
(base as Type.GetType(derivedName)).DoThisThing();
}
我很确定这无法完成,但很高兴知道这一点。谢谢
编辑:我知道我可以使用类型名称的反射构造对象,但我想使用现有对象。而且我知道这通常是一个坏主意。但是我想将其用于 SpecFlow BDD 功能。
【问题讨论】:
-
考虑使用
Relection -
为什么要投?你不能动态调用它吗?例如
((dynamic)this).DoThisThing(); -
如果
derivedName在编译时不知道,编译器如何检查DoThisThing是否是所有可能的derivedNames 上的有效方法,您可以传递给该方法?你为什么要做演员?您是否考虑过使用虚拟方法/接口? -
现有哪些对象?你能提供一个更好的代码示例吗?试着解释你为什么要这样做。
-
@Luaan 这是一个 BBD 测试,所以类型名称是来自功能文件的字符串。
标签: c# .net reflection casting