首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Activator.CreateInstance失败

Activator.CreateInstance失败
EN

Stack Overflow用户
提问于 2012-01-23 09:14:04
回答 5查看 5.3K关注 0票数 5

我正在使用Activator.CreateInstance动态创建一个实例。然而,它是说对象不能在每次尝试中都是空的。粘贴下面的代码。我做错什么了吗?

如果有什么问题

Activator.CreateInstance

替换常规的开关/case语句来确定运行时的对象类型?谢谢。

代码语言:javascript
复制
public abstract  class Base
{
    public abstract void Func();

}
public  class  Derived:Base
{
    public override void Func()
    {
        MessageBox.Show("Derived First");
    }
}

public class Derived2 : Base
{
    public override void Func()
    {
        MessageBox.Show("Derived Second");
    }
}

private void button1_Click(object sender, EventArgs e)
{
    // I was trying to make use of the overladed version 
    // where it takes the Type as parameter.
    BaseClass report = 
       (BaseClass) Activator.CreateInstance(Type.GetType("Derived")); 
    report.Func();
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-23 09:16:18

来自Type.GetTypeType.GetType参数的文档

要获取的类型的程序集限定名称。见AssemblyQualifiedName。如果类型位于当前正在执行的程序集中或Mscorlib.dll中,则提供由其命名空间限定的类型名称就足够了。

这意味着您还需要(至少)传递名称空间:

代码语言:javascript
复制
BaseClass report = (BaseClass) Activator.CreateInstance(Type.GetType("YourNamespace.Derived")); 
票数 3
EN

Stack Overflow用户

发布于 2012-01-23 09:17:02

嗯,Type.GetType("Derived")几乎可以肯定地返回null -这将使它与Activator.CreateInstance无关。

检查:

  • 与调用代码在同一个程序集中Derived吗?如果没有,请在正确的程序集上使用Assembly.GetType,或者将程序集名称包含在要传递给命名空间中的Assembly.GetType类型名称中?如果是这样,则需要命名空间--限定它为

票数 3
EN

Stack Overflow用户

发布于 2012-01-23 09:18:57

Type.GetType("Derived"找不到类型

Simeple变化

代码语言:javascript
复制
BaseClass report = (BaseClass) Activator.CreateInstance(Type.GetType("Derived"));

到这个

代码语言:javascript
复制
Base report = (Base)Activator.CreateInstance(typeof(Derived));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8969268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档