泛型,利用反射创建和普通创建
反射
var input = Activator.CreateInstance(typeof(Input<>).MakeGenericType(typeof(T))) as dynamic;
typeof(T)这个位置可以塞入不同的类型
Activator.CreateInstance + 反射动态创建实例:
- 这种方式使用 Activator.CreateInstance 方法结合反射来动态地创建对象实例。
- Activator.CreateInstance(typeof(Input<>).MakeGenericType(typeof(T))) 表示创建了一个泛型类型 Input 的实例。这个过程是在运行时进行的,因为在编译时类型参数 T 是未知的。
- 通过 as dynamic 将实例转换为动态类型 dynamic,这样可以以动态方式设置其属性和调用方法。这样做的好处是可以在运行时根据需要创建不同类型的对象实例。
一般
new Input<T> {
FuncElementItem = funcelemvm,
PropertyInfos = propertyinfo_one,
Value = value,
DisplayName = displayname
}
- 这种方式是使用 C# 中的对象初始化器语法,通过 new 关键字直接创建对象实例并设置其属性。
- new Input { … } 表示创建了一个类型为 Input 的对象实例,并通过对象初始化器设置了其属性值。
- 这种方式是静态的,在编译时就确定了要创建的对象类型,并直接通过对象初始化器设置属性值。这种方式更为直观和简洁,适用于已知类型的对象创建。