gpt4 book ai didi

c# - 创建类型的实例,作为方法的参数提供

转载 作者:行者123 更新时间:2023-11-30 19:50:51 25 4
gpt4 key购买 nike

要实例化的类:

public class InstantiateMe
{
public String foo
{
get;
set;
}
}

一些伪代码:

public void CreateInstanceOf(Type t)
{
var instance = new t();

instance.foo = "bar";
}

到目前为止,考虑到我想要实现的目标的动态特性,我认为我需要使用反射来完成这项工作。

这是我的成功标准:

  • 创建任何类型的实例
  • 无需调用构造函数即可创建类型实例
  • 访问所有公共(public)属性

我将不胜感激一些有效的示例代码。我不是 C# 的新手,但我以前从未使用过反射。

最佳答案

您基本上需要使用反射。使用 Activator.CreateInstance() 构造您的类型,然后对该类型调用 InvokeMember() 以设置属性:

public void CreateInstanceOfType(Type t)
{
var instance = Activator.CreateInstance(t); // create instance

// set property on the instance
t.InvokeMember(
"foo", // property name
BindingFlags.SetProperty,
null,
obj,
new Object[] { "bar" } // property value
);
}

要访问通用类型的所有属性并设置/获取它们,您可以使用 GetProperties() 返回一个 PropertyInfo 集合,您可以遍历该集合:

foreach (PropertyInfo property in type.GetProperties())
{
property.GetValue() // get property
property.SetValue() // set property
}

另请参阅 the documentation了解更多使用 InvokeMember() 的方法。

关于c# - 创建类型的实例,作为方法的参数提供,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751123/

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