首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

简单的反射,该如何解决

2012-04-25 
简单的反射我写了几个类,类所在的程序集名assemblyType,程序集路径D:\tools\assemblyType基类:TypeBaseT

简单的反射
我写了几个类,类所在的程序集名assemblyType,程序集路径"D:\tools\assemblyType"
基类:TypeBaseTest
public abstract TypeBaseTest
{
//获取某个子类对象
  pulibc static TypeBaseCreateInstance(TypeEntity entity)
  {
  //怎么写反射???
  //或者说怎么写个方法得到每个子类
  }
  publis abstract void test();
}  
public class TypeTest:TypeBaseTest
{
private TypeEntity _entity;
  public TypeTest(TypeEntity entity)
  {
  _entity=entity;
  }
 ......其他属性
 publis override void test()
{....... }

}

public class TypeYour:TypeBaseTest
{
  private TypeEntity _entity;
  public TypeYour(TypeEntity entity)
  {
  _entity=entity;
  }
 ......其他属性
 publis override void test()
{....... }


}

像这样的对象怎么写反射对象呢? 
TypeEntity entity=new TypeEntity();
TypeBaseTest instance=TypeBaseTest.TypeBaseCreateInstance(entity);//怎么使用反射?
instance.test();
TypeBaseCreateInstance 方法怎么写?

[解决办法]

C# code
 // Assembly加载程序集,读取程序集            Assembly _assembly = Assembly.Load("你DLL的名字");            // 获取程序集中的类            IBaseCommand iCmd = null;            foreach (Type type in _assembly.GetTypes())            {                if (type.FullName.StartsWith("类所在的名命空间,如以System.Windows开头"))                {                    iCmd = (IBaseCommand)Activator.CreateInstance(type);                    if (iCmd.ChineseCommand.Equals(commandName) || iCmd.EnglishCommand.Equals(commandName.ToLower()))                    {                        iCmd.Execution();                        break;                    }                }            }
[解决办法]
有现成的,不过看了一些微软的经典项目,他们好像都是直接调用数据访问层。

//path需要手动修改,要反射的项目名称,三层里面的单个项目名称,如MyBookDal。
private static readonly string DBType =
System.Configuration.ConfigurationManager.AppSettings["dbtype"];

/// <summary>
/// 反射创建类的实例
/// </summary>
/// <typeparam name="T">类名称或者类继承的接口</typeparam>
/// <param name="className">类名称</param>
/// <returns>类的事例</returns>
public static T CreateOjectDal<T>(string className)
{
className = DBType + "." + className;
//找程序集-->实例化类--> 转为父类
return (T)Assembly.Load(DBType).CreateInstance(className);
}

热点排行