C#反射创建带参数的类:

Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
object[] parameters = new object[参数数量];//创建参数列表
parameters[索引] = ...;//参数赋值
object obj = assembly.CreateInstance("类全名称", false, System.Reflection.BindingFlags.Default, null, parameters, null, null);// 创建类的实例

Assembly.CreateInstance 方法重载原型:

public virtual object? CreateInstance (
string typeName, 
bool ignoreCase, 
System.Reflection.BindingFlags bindingAttr, 
System.Reflection.Binder? binder, 
object[]? args, 
System.Globalization.CultureInfo? culture, 
object[]? activationAttributes
);

参数说明:
string typeName:类全名称;

bool ignoreCase:如果为 true,则忽略类型名的大小写;否则,为 false

System.Reflection.BindingFlags bindingAttr:影响执行搜索的方式的位掩码。 此值是 BindingFlags中的位标志的组合。

System.Reflection.Binder? binder:一个对象,它启用绑定、对自变量类型的强制、对成员的调用,以及通过反射对 MemberInfo 对象的检索。 如果 binder 为 null,则使用默认联编程序。

object[]? args:包含要传递给构造函数的自变量的数组。 此自变量数组在数量、顺序和类型方面必须与要调用的构造函数的参数匹配。 如果需要无参数构造函数,则 args 必须是空数组或 null

System.Globalization.CultureInfo? culture:用于控制类型强制的 CultureInfo 的实例。 如果这是 null,则使用当前线程的 CultureInfo。 (例如,这对于将表示 1000 的字符串转换为 Double 值来说是必需的,因为不同的区域性以不同的方式表示 1000。)

object[]? activationAttributes:包含一个或多个可以参与激活的特性的数组。 通常,为包含单个 UrlAttribute 对象的数组,该对象指定激活远程对象所需的 URL。 此参数与客户端激活的对象相关。 客户端激活是一项传统技术,保留用于向后兼容,但不建议用于新的开发。 应改用 Windows Communication Foundation 来开发分布式应用程序。


return object?:如果未找到 null,则为指定的类型实例或 typeName。 所提供的自变量用于解析类型,以及绑定用于创建实例的构造函数。















Categories: 编程技术