面向对象中如何动态的调用其它的类

问题描述

在一个主程序中调用一个类,假设为类名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被版主删除

时间: 2024-10-22 13:03:15

面向对象中如何动态的调用其它的类的相关文章

php面向对象中static静态属性和静态方法的调用

 这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下     本文实例讲述了php中static静态属性和静态方法的调用.分享给大家供大家参考.具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例

PL/SQL --> 动态SQL调用包中函数或过程

      动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句.最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量.但是对于系统自定义的包或用户自定的包其下的函数或过程,不能等同于DDL以及DML的调用,其方式稍有差异.如下见本文的描述.       有关动态SQL的描述,请参考:           PL/SQL --> 动态SQL           PL/SQL --> 动态SQL的常见错误   1.动态SQL调用包中过程不正确

php面向对象中static静态属性和静态方法的调用_php技巧

本文实例讲述了php中static静态属性和静态方法的调用.分享给大家供大家参考.具体如下: 这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性). 实例: <?php header("content-type:text/html;charset=utf-8"); c

struts中动态方法调用使用通配符_java

一.DMI动态方法调用的其中一种改变form表单中action属性的方式已经讲过了.还有两种,一种是改变struts.xml配置文件中action标签中的method属性,来指定执行不同的方法处理不同的业务逻辑:另外一种是使用通配符的方式.改变method属性的方式需要配置多个action,而且这些action定义的绝大部分都是相同的,所以这种定义是相当冗余的.因此,使用通配符就可以在一个action标签中代替多个逻辑处理的Action. 二.示范:(和之前的动态方法调用改变form表单acti

在delphi中如何动态建立类的实例

本文为原创,如需转载,请注明作者和出处,谢谢!     在面向对象语言中,用两种方法建立类的实例:静态建立和动态建立.静态建立就是在程序中显式地建立类的实例,如c1 = TClass1.Create().而动态建立是在只知道类名的前题下建立类的实例.动态建立在实现上要比静态建立更灵活,因为动态建立无需引用被建立 类,并且更容易实现如多态等面向对象特性. 一.    动态建立类的实例 在delphi中动态建立类的实例可分为4步. 1. 声明一个从TPersistent继承的类.因为在注册类时要求必

在C#中通过P/Invoke调用Win32DLL

  我在自己最近的编程中注意到一个趋势,正是这个趋势才引出本月的专栏主题.最近,我在基于 Microsoft .Net Framework 的应用程序中完成了大量的 Win32 Interop.我并不是要说我的应用程序充满了自定义的 interop 代码,但有时我会在 .Net Framework 类库中碰到一些次要但又繁絮.不充分的内容,通过调用该 Windows API,可以快速减少这样的麻烦. 因此我认为,.Net Framework 1.0 或 1.1 版类库中存在任何 Windows

在ASP中改善动态分页的性能

动态|分页|性能 From computerworld 在ASP中改善动态分页的性能人民银行济南分行清算中心 张立锋 山东省水利科学研究院 张 禾 -------------------------------------------------------------------------------- 概 述 ---- 现在有不少介绍利用ASP实现动态分页的文章,方法大同小异,就是每次利用ADO返回原始数据满足条件记录集中的指定页.但在实际工程应用中,原始数据量通常很大,原始数据的加工比较

教你在Delphi程序中使用动态图标

在应用程序的编写中,组合框(ComboBox).列表框(ListBox).等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标.在一般的Windows应用程序中,这些图标的显示都要随列出的显示文本的变化而变化,例如在组合框中列出当前目录下的所有文件时,在组合框左边就显示与文件名相关联的图标,这就是所谓的动态图标.在Delphi中使用动态图标的步骤如下: 一.图标的获取 要使用动态图标,首先要解决的是如何获得显示文本和与其相关联的图标句柄.该图标通过文件关联由系统注册表决定,并且在

WF中的动态更新

关于动态更新 在开发工作流时,我们会在工作流设计器中通过拖拽活动,设置属性等等来设计我们的工作流,我们 希望我们在设计时定义好的工作流在运行时是不变的.但在实际中我们往往需要在运行时来改变工作流 的架构,例如我们已经定义好的流程在没有结束时我们需要增加一个流程点,这个时候我们就需要使用 动态更新来现实.在WF中我们也可以对正在运行的工作流实例添加删除活动,修改活动,规则条件等. 当动态更新应用到工作流实例上时,只影响当前的工作流实例.其他的和将来的都不受影响,仍然使用 原始的工作流定义. 动态更