现有一组类class a,b,c....都实现了一个方法getData()
要求实现一个方法void work(string className),能够根据传入的className动态的生成该类的实例,并调用该类的getData方法
比如,我调用的时候是work("a")
那么work方法内的效果等同于:
a classA=new a();
a.getData();
求解该如何实现?
------解决思路----------------------
搜一搜:反射
只要知道命名空间,类名,属性名,函数名,都是可以通过反射调用的
可以实例化,也可以赋值,取值或执行函数
------解决思路----------------------
dynamic ss = Activator.CreateInstance("dll名称", "classname");
ss.getData();
如果实现了接口:
var ss = Activator.CreateInstance("dll名称", "classname") as IGetData;
ss.getData();
最后如果都不明白,就看http://blog.csdn.net/tonglian/article/details/2271066
------解决思路----------------------
类名必须是包含空间的全名, 请看示例
CreateAndDo("CSDemo.ttt", "getData");
private void CreateAndDo(string classfullname, string methodname)
{
Type t = Type.GetType(classfullname);
if (t != null)
{
object val = Activator.CreateInstance(t);
MethodInfo method = t.GetMethod(methodname);
if (method != null)
{
method.Invoke(val, new object[] { });
}
}
}
public class ttt
{
public void getData()
{
Debug.WriteLine("getdate");
}
}