
例如,有一个数组 定义了若干名称[ 'a', 'b', 'c' ... ] 。我想通过循环,然后动态创建上述名称的 对象。
下面是伪代码。
class program{ void Main(){ foreach ( var i in array ){ var array[i] = new array[i](); } } } class a{ vodi index(){} } class b{ vodi index(){} } class c{ vodi index(){} } 目前我猜想的一个做法,就是用反射去实现。果然只会动态语言,去写静态语言,感觉跨了一个生态环境啊。
谢谢各位了,通过不断测试,用反射可以实现了。
Type type = Type.GetType("namespace.a"); MethodInfo addMethod = type.GetMethod("index"); addMethod.Invoke(null, null); 但是我又有一个问题了。 如果 class a{ static void index() } 如果不声明public 。 Invoke执行会出错。好奇怪。
1 killergun 2021-03-23 15:05:55 +08:00 想从字符串到 class,需要反射 |
2 finab 2021-03-23 15:17:11 +08:00 var types = new Dictionary<string, Type> { {"a", typeof(a)}, {"b", typeof(b)}, {"c", typeof(c)} }; var object = Activator.CreateInstance(types[ array[i] ]); |
3 geelaw 2021-03-23 15:55:03 +08:00 如果你想支持任意类型,需要用反射。如果你想支持有限种类型,可以自己写代码。 要用 Type type 的无参数构造器构造对象,可以用 Expression.Lambda<Func<object>>(Expression.New(type)).Compile() 获得一个委托,此后调用该委托,效率非常高。 |
4 ipwx 2021-03-23 15:59:14 +08:00 那你用 C++ 岂不是一种折磨,都没反射。。 ---- 静态语言标准做法:Factory 模式。 |
5 zls3201 2021-03-23 16:16:35 +08:00 ExpandObject 了解一下 |