问题描述
在一个主程序中调用一个类,假设为类名A,调用这个A的方法,但当用户觉得调用这个A的方法不够准确,于是设计了另一个类,类名为B,B也实现同一个方法名,但实现的具体过程不一样,问题是:能否通过界面化的方式人工设置调用了B类而不是以前的A类了,不用去修改主程序的源代码,A类可能也是存在的,因为它可以作为B类的父类,问题主要在于B类的类名B,是在将来命名的,可以说是随机的,通过什么样的方式能实现这种调用,请各位大侠指教,小弟在此谢过,如果回答满意,会有重谢!
解决方案
解决方案二:
usereflectiontoloadpropertyinformation,listallpossiblemethodnames
解决方案三:
写一个接口,把A、B类的那个同名方法放到这个接口里,让A、B类实现这个接口,主程序中调用时用反射,人工选择时把选择的功能类的对应类名字符串传到反射调用的方法里,强转成接口对象就行了(貌似表达的不清楚,大概就是这样吧)。
解决方案四:
接口或抽象类
解决方案五:
"能否通过界面化的方式人工设置调用了B类而不是以前的A类了"不知道你以前是怎么调的
解决方案六:
请问你的界面化方式是指什么?
解决方案七:
按照你的要求,我编写一个简单的程序来实现,不知道我有没有理解错你的意思,代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Reflection;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){//加载当前的程序集(WindowsApplication1.exe是当前的程序的exe)System.Reflection.Assemblyass=System.Reflection.Assembly.LoadFrom("ConsoleApplication1.exe");Type[]mytypes=ass.GetTypes();//获取程序集的类型Console.WriteLine("选择你需要调用的类:");intindex=0;foreach(Typetinmytypes)//列出程序集中的所有类{if(t.IsClass)//判断该类型是不是类Console.WriteLine(index+""+t.Name);index++;}intselectIndex=int.Parse(Console.ReadLine());//按照要求,界面化的方式人工设置调用,选择你需要的类Typetype=mytypes[selectIndex];//创建程序集类型一个实例,as操作符来判断该类是否支持指定的接口,如果不支持将给接口变量赋空值(null)IMyInterfacemyInterface=System.Activator.CreateInstance(type)asIMyInterface;if(myInterface!=null)Console.Write("你所调用函数的返回值是:"+myInterface.getInformation());elseConsole.WriteLine("该类不支持指定接口!");Console.Read();}}//编写一个接口,接口里的方法可以由不同的类来继承实现publicinterfaceIMyInterface{stringgetInformation();}publicclassA:IMyInterface{publicstringgetInformation()//实现方式一{return"A.getInformation()";}}//类名可以是将来命名,也可以是随机的,需要调用时可以通过反射(Reflection)来获取publicclassB:IMyInterface{publicstringgetInformation()//实现方式二{return"B.getInformation()";}}}
解决方案八:
第一句的注释写错了,应该是ConsoleApplication1.exe,不是WindowsApplication1.exe,^_^
解决方案九:
该回复于2008-05-26 19:35:32被版主删除