gpt4 book ai didi

c# - 如何按名称激活派生类型?

转载 作者:行者123 更新时间:2023-11-30 20:38:03 25 4
gpt4 key购买 nike

我们遇到了一个需要按名称(字符串)创建类型的场景。我们为此使用激活器,但由于类型在编译时未知,我们将其分配给已知的基类型。但我们真正需要的是让对象表现得像它的真实类型。参见示例:

void Main() {
// Scenario A
ShowType(new Derived());

// Scenario B
var derivedType = Type.GetType("Derived");
var derived = Activator.CreateInstance(derivedType) as Base;
ShowType(derived);
}

void ShowType<T>(T obj) {
typeof(T).FullName.Dump();
RaiseEvent(new Event<T>());
}

void RaiseEvent(Event<T> obj) {
}

public class Base {}
public class Derived : Base { }

返回的内容如下:

Scenario A: Derived (good)
Scenario B: Base (bad)

如何让场景 B 充当场景 A? (即让 ShowType 实际上得到 Derived 对象)

调用 obj.GetType() 确实给出了我们想要的类型,但在实际情况中,我们正在调用 ShowType 中的另一个方法,该方法采用通用类型参数,所以不确定如何使用 Type 解决这个问题。

最佳答案

变量derived 实际上是Derived 类型。问题出在采用编译时类型的泛型方法中。要使您的示例正常工作,您可以将其转换为 dynamic 以强制使用运行时类型。

ShowType((dynamic)derived);

附言在这种情况下,您应该考虑与 dynamic 相关的性能问题。

关于c# - 如何按名称激活派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35466268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com