如何得到一个命名空间,或者接口中的所有类。

问题描述

程序结构如下ns.IUser(接口)ns.BigUsers(类)ns.SmallUsers(类)ns.Users(类)现在想写个方法publicArrayList<IUser>GetAllUsers(stringinterfaceName){ArrayList<IUser>ay=newArrayList<IUser>();ay.add(newBigUsers());ay.add(newSmallUsers());ay.add(newUsers());returnay;}有没有人能写出个动态的。根据接口名能得到实现此接口的所有类的实例的集合呀?谢谢。

解决方案

解决方案二:
我举得这个估计够呛吧。
解决方案三:
先用反射获取所有命名空间下面所有成员遍历这些成员看这些成员是否实现了指定接口如果试下了就实例化这中类型的成员
解决方案四:
反射有这个功能么?
解决方案五:
引用2楼的回复:

先用反射获取所有命名空间下面所有成员遍历这些成员看这些成员是否实现了指定接口如果试下了就实例化这中类型的成员

说的真轻松啊,你反射获得一下命名空间下的所有成员试试。回到正题。这个问题的难点在于取到一个命名空间下的所有类。因为命名空间并不是一个逻辑结构,只是类似于一种名字前缀。所以只能通过遍历当前加载的所有DLL的所有类成员来找到命名空间下当前的所有类成员。当有新DLL被加载之后,就可能会有新的成员出现。
解决方案六:
classProgram{staticvoidMain(string[]args){varasm=Assembly.Load("4.0Test");vartypes=asm.GetTypes();varinstances=newList<IA>();foreach(vartempintypes){vartempInterface=temp.GetInterface("IA");if(tempInterface!=null&&tempInterface==typeof(IA)){varinstance=Activator.CreateInstance(temp);if(instanceisIA){instances.Add(instanceasIA);}}}Console.Read();}}publicinterfaceIA{}publicclassB:IA{}publicclassC:IA{}
解决方案七:
把方法提取出来了你看下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Reflection;namespace_4._0Test{classProgram{staticvoidMain(string[]args){vartemp=GetInstance("IA");Console.Read();}publicstaticList<IA>GetInstance(stringinterfaceName){varasm=Assembly.Load("4.0Test");//改成你的程序集名称或者路劲vartypes=asm.GetTypes();varinstances=newList<IA>();foreach(vartempintypes){vartempInterface=temp.GetInterface(interfaceName);if(tempInterface!=null&&tempInterface==typeof(IA)){varinstance=Activator.CreateInstance(temp);if(instanceisIA){instances.Add(instanceasIA);}}}returninstances;}}publicinterfaceIA{}publicclassB:IA{}publicclassC:IA{}}

时间: 2024-12-10 14:49:21

如何得到一个命名空间,或者接口中的所有类。的相关文章

一个类如何实现两个接口中同名同参数不同返回值的函数

假设有如下两个接口: public interface IA{    string GetA(string a);}public interface IB{    int GetA(string a);} 他们都要求实现方法GetA,而且传入的参数都是一样的String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class X:IA,IB 由于接口中要求的方法的方法名和参数是一样的,所以不可能通过重载的方式来解决,那么我们该

java 接口 接口实现-Java中一个类如何实现多个接口中同名同参返回值不同的方法?

问题描述 Java中一个类如何实现多个接口中同名同参返回值不同的方法? 如:` class A implements Interface1,Interface2{ //这里该怎么写呢? } interface Interface1{ public void method(); } interface Interface2{ public int method(); } 解决方案 class A implements Interface1,Interface2{ //直接写啊 public voi

link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事?

问题描述 link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事? link中如何从接口中调用一个方法的参数的类型似乎不对是怎么回事?

手机-登录一个页面后,怎样在文本框直接显出数据,在action接口中怎样写

问题描述 登录一个页面后,怎样在文本框直接显出数据,在action接口中怎样写 就是在用手机登陆一个网站后,有一个活动报名,点击后有两个文本框,一个姓名,一个手机号,点击活动,让手机号直接显示,不必每次输入,在action中怎样写 解决方案 你用什么框架实现的呢?在action中把手机号信息传递给前台页面直接显示. 解决方案二: 给表单赋值 赋值读出之前保存到数据库的手机号

android-java中的Query接口是一个怎么样的接口

问题描述 java中的Query接口是一个怎么样的接口 听说Jquery是插件, java中的Query接口是一个怎么样的接口,接口就是一种特殊的类,里面有很多常量还有未实现的抽象方法, 解决方案 jquery是js,不是java的库. 解决方案二: Query接口学习笔记 解决方案三: 请参考我写的文章:http://blog.csdn.net/wanghang1208/article/details/49923405.

implements一个接口,父接口中的方法可以不实现吗?

问题描述 HttpServletRequest继承了ServletRequest,RequestFacade implements HttpServletReqeustServletRequest中有一个getServletContext()方法,但是RequestFacade中没有 求解 问题补充:牟盖东 写道 解决方案 那你是用错了公司的包了,好好看看自己用的是什么,再查 corresponding API document解决方案二:抽象类中的抽象方法必须实现,不是抽象的方法可以不实现,接

Cardboard虚拟现实开发技巧(一)之放置一个固定在视野中的物体

Google Cardboard 虚拟现实眼镜开发技巧(一)之放置一个固定在视野中的物体 利用CardboardMain下的Head轻松放置一个固定在视野中的物体 大家知道在游戏开发中,我们经常会需要放置一些操作面板啊,血量槽啊,比如CS中的枪械,子弹,血量等等,这些UI因素是应该永远显示在用户视野当中的,而不是一转头就看不到自己的血量了. 这个问题在传统的Unity游戏开发中自然是小菜一碟,但是在虚拟现实应用里就不一样了,我们的手机屏幕被分成了两部分,所以这些UI也应该是相应的分离显示,而如果

用C实现的一个基本COM接口IFoo(二)

在C实现COM接口系列1中实现的com接口IFoo与使用它的客户耦合在一起,没有实现在各自分离的模块,因此不符合模块化编程思想.本期添加类厂支持,以使接口的实现与接口的使用相分离. --------------------------------------------------- 类厂的作用到底是什么? 将接口的实现与客户使用分离开来吗? 不尽然.使用CoCreateInstance,客户可以完全不必知道类厂的存在,而创建组件,获取组件实现的接口并使用. 即COM库可以完全抛开类厂的概念,而

初始化java接口中的字段

接口中定义的字段会自动具有static和final属性.它们不能是"空白final",但可初始化成非常数表达式.例如:   //: RandVals.java // Initializing interface fields with // non-constant initializers import java.util.*; public interface RandVals { int rint = (int)(Math.random() * 10); long rlong =