gpt4 book ai didi

c# - Activator.CreateInstance 与动态类型

转载 作者:行者123 更新时间:2023-12-05 01:04:27 26 4
gpt4 key购买 nike

我想我缺乏了解,究竟发生了什么:
用户可以输入程序集的路径和对象类型,然后我尝试创建它的实例。

我的做法:

        Assembly a = Assembly.LoadFile(txtAssemblyPath.Text);
Type myType = a.GetTypes().ToList().FirstOrDefault(f => f.Name == txtObjectName.Text);

var obj = Activator.CreateInstance<myType>();
var obj2 =(myType) Activator.CreateInstance(myType);

问题在于对象本身的创建。看起来 myType 作为类型并没有受到威胁。在这个例子中: Creating generic variables from a type - How? Or use Activator.CreateInstance() with properties { } instead of parameters ( )?

他们只是得到一个对象,所以我想这不是同一个案例。我完全不明白:CreateInstance(Type) 有效,但带有 Type 的 CreateInstance 无效,但 T 和 Type 应该相同:System.Type。

预先感谢您的澄清。

马蒂亚斯

最佳答案

有一个使用差异......当你写:

var obj = Activator.CreateInstance<myType>();

您像使用类型一样使用您的类,这是实现它的好方法。
您使用了具有类类型引用的泛型类型。

但是有:
var obj2 =(myType) Activator.CreateInstance(myType);

你像一个实例(对象)一样使用你的类。你不能那样做,一个类就是一个模式。
如果你想调用第二种方法,你必须写:
var obj2 =(myType) Activator.CreateInstance(typeof(myType));

此代码将创建类 Type 的一个实例,该实例将描述您的类 myType。

我希望清楚。

一个类是一个模式,你可以用这个模式创建一个对象,它将是一个实例(你的类的内存对象)。

关于c# - Activator.CreateInstance 与动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23105264/

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