C#中一个泛型类,如何通过反射得到实例

anfernee1019 2009-12-29 03:48:56
例如泛型类通常的实例方法是
GridViewOperate<VersionInfo> obj= new GridViewOperate<VersionInfo>()

其中VersionInfo我希望可以通过反射自定义进去,从而得到实例
...全文
1004 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu_microsoft 2010-01-18
  • 打赏
  • 举报
回复
泛型类本身就任意类型的啊!为什么要反射呢?
不明白!楼主是否可以说详细点
wu_microsoft 2010-01-18
  • 打赏
  • 举报
回复
既然有知道泛型类,那为什么还要反射呢?
反射不废资源吗?
wu_microsoft 2010-01-18
  • 打赏
  • 举报
回复
楼主是不是想反射动态创建该类型实例?
wjq 2009-12-29
  • 打赏
  • 举报
回复
先取得泛型类行的Type实例,调用MakeGenericType方法,传入泛型参数。
然后像普通类的反射创建实例一样,创建实例
fj4408 2009-12-29
  • 打赏
  • 举报
回复
up,正解。
江南小鱼 2009-12-29
  • 打赏
  • 举报
回复

/// <summary>
/// 返回指定dll下的类
/// </summary>
/// <param name="clsName">泛型类名(GridViewOperate)</param>
/// <param name="entityName">实体类名(VersionInfo)</param>
/// <param name="m_Assembly">泛型类</param>
/// <returns></returns>
static object ActivetorMethodOutObject(string clsName,string entityName,Assembly m_Assembly)
{
object _result = null;
try
{
string _tmpCls = "Platform." + clsName+"<"+entityName+">";//Platform是dll文件的名字(换成你的VersionInfo所在的dll文件即可)
Type _CurrentType = m_Assembly.GetType(_tmpCls, false);
_result = Activator.CreateInstance(_CurrentType);
}
catch { }
return _result;
}
anfernee1019 2009-12-29
  • 打赏
  • 举报
回复
我想要的泛型类的反射方法GridViewOperate <VersionInfo>
如果按照lovelj2012兄弟提供的方法,怎么把versionInfo这个泛型参数传递进去呢?
wangping06 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 anfernee1019 的回复:]
引用 1 楼 lovelj2012 的回复:
C# code
Assembly m_Assembly= Assembly.LoadFrom(str);//载入装配件//返回指定dll下的类staticobject ActivetorMethodOutObject(string clsName,Assembly m_Assembly)
        {object _result=null;try
            {string _tmpCls="Platform."+ clsName;
                Type _CurrentType= m_Assembly.GetType(_tmpCls,false);
                _result= Activator.CreateInstance(_CurrentType);
            }catch { }return _result;
        }


Platform是指泛型类的名称?clsName指泛型参数类的名称吗?
就是对应的GridViewOperate和VersionInfo???
[/Quote]
="Platform."+ clsName;
//命名空间+类名
江南小鱼 2009-12-29
  • 打赏
  • 举报
回复
你不是使用反射得到VersionInfo类吗?

你把上面的Platform换成你的实体类(VersionInfo)所在的dll文件名,clsName即是类名,也就是VersionInfo。
anfernee1019 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lovelj2012 的回复:]
C# code//返回指定dll下的类staticobject ActivetorMethodOutObject(string clsName,Assembly m_Assembly)
{object _result=null;try
{string _tmpCls="Platform."+ clsName;//Platform是dll文件的名字(换成你的VersionInfo所在的dll文件即可) Type _CurrentType= m_Assembly.GetType(_tmpCls,false);
_result= Activator.CreateInstance(_CurrentType);
}catch { }return _result;
}
[/Quote]

我希望得到的不是一个VersionInfo实例,而是一个GridViewOperate <VersionInfo>实例
wangping06 2009-12-29
  • 打赏
  • 举报
回复
up
anfernee1019 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lovelj2012 的回复:]
C# code
Assembly m_Assembly= Assembly.LoadFrom(str);//载入装配件//返回指定dll下的类staticobject ActivetorMethodOutObject(string clsName,Assembly m_Assembly)
{object _result=null;try
{string _tmpCls="Platform."+ clsName;
Type _CurrentType= m_Assembly.GetType(_tmpCls,false);
_result= Activator.CreateInstance(_CurrentType);
}catch { }return _result;
}
[/Quote]

Platform是指泛型类的名称?clsName指泛型参数类的名称吗?
就是对应的GridViewOperate和VersionInfo???
江南小鱼 2009-12-29
  • 打赏
  • 举报
回复
 //返回指定dll下的类
static object ActivetorMethodOutObject(string clsName,Assembly m_Assembly)
{
object _result = null;
try
{
string _tmpCls = "Platform." + clsName;//Platform是dll文件的名字(换成你的VersionInfo所在的dll文件即可)
Type _CurrentType = m_Assembly.GetType(_tmpCls,false);
_result = Activator.CreateInstance(_CurrentType);
}
catch { }
return _result;
}
江南小鱼 2009-12-29
  • 打赏
  • 举报
回复

Assembly m_Assembly = Assembly.LoadFrom(str);//载入装配件

//返回指定dll下的类
static object ActivetorMethodOutObject(string clsName,Assembly m_Assembly)
{
object _result = null;
try
{
string _tmpCls = "Platform." + clsName;
Type _CurrentType = m_Assembly.GetType(_tmpCls,false);
_result = Activator.CreateInstance(_CurrentType);
}
catch { }
return _result;
}

110,534

社区成员

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

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

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