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

BeiJingHug 2012-04-18 10:51:21
程序结构如下
ns.IUser(接口)
ns.BigUsers(类)
ns.SmallUsers(类)
ns.Users(类)

现在想写个方法
public ArrayList<IUser> GetAllUsers(string interfaceName){
ArrayList<IUser> ay =new ArrayList<IUser>();
ay.add(new BigUsers());ay.add(new SmallUsers());ay.add(new Users());
return ay;
}

有没有人能写出个动态的。根据接口名能得到实现此接口的所有类的实例的集合呀?谢谢。
...全文
181 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xboxeer 2012-04-18
  • 打赏
  • 举报
回复
把方法提取出来了你看下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Reflection;

namespace _4._0Test
{
class Program
{
static void Main(string[] args)
{
var temp = GetInstance("IA");
Console.Read();
}

public static List<IA> GetInstance(string interfaceName)
{
var asm = Assembly.Load("4.0Test");//改成你的程序集名称或者路劲
var types = asm.GetTypes();
var instances = new List<IA>();
foreach (var temp in types)
{
var tempInterface = temp.GetInterface(interfaceName);
if (tempInterface != null && tempInterface == typeof(IA))
{
var instance = Activator.CreateInstance(temp);
if (instance is IA)
{
instances.Add(instance as IA);
}
}
}
return instances;
}
}

public interface IA
{ }

public class B : IA
{
}

public class C : IA
{
}

}

xboxeer 2012-04-18
  • 打赏
  • 举报
回复
class Program
{
static void Main(string[] args)
{
var asm = Assembly.Load("4.0Test");
var types = asm.GetTypes();
var instances = new List<IA>();
foreach (var temp in types)
{
var tempInterface = temp.GetInterface("IA");
if (tempInterface != null && tempInterface == typeof(IA))
{
var instance = Activator.CreateInstance(temp);
if (instance is IA)
{
instances.Add(instance as IA);
}
}
}
Console.Read();
}
}

public interface IA
{ }

public class B : IA
{
}

public class C : IA
{
}
cheng2005 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
先用反射获取所有命名空间下面所有成员 遍历这些成员 看这些成员是否实现了指定接口 如果试下了就实例化这中类型的成员
[/Quote]
说的真轻松啊,你反射获得一下命名空间下的所有成员试试。

回到正题。这个问题的难点在于取到一个命名空间下的所有类。
因为命名空间并不是一个逻辑结构,只是类似于一种名字前缀。所以只能通过遍历当前加载的所有DLL的所有类成员来找到命名空间下当前的所有类成员。当有新DLL被加载之后,就可能会有新的成员出现。
orochiheart 2012-04-18
  • 打赏
  • 举报
回复
反射有这个功能么?
xboxeer 2012-04-18
  • 打赏
  • 举报
回复
先用反射获取所有命名空间下面所有成员 遍历这些成员 看这些成员是否实现了指定接口 如果试下了就实例化这中类型的成员
宝_爸 2012-04-18
  • 打赏
  • 举报
回复
我举得这个估计够呛吧。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧