通过类名称(string) 取得类(myNameSpace.myClass)

E_Sorl 2008-01-10 11:48:02
通过类名称(string) 取得类(myNameSpace.myClass).
如一方法:

public object GetClassByName(string className)
{
}

通过类名称,怎样取该类.
求解决方法,谢谢!
...全文
260 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
GhostAdai 2008-01-11
  • 打赏
  • 举报
回复
用反射就可以了,要说清楚怎么回事可不容易,建议去查相关资料,如果只是简单使用的话10楼的是最简单的应用了。
lmqslyh 2008-01-11
  • 打赏
  • 举报
回复
Type.GetType(className)
Assembly.GetType(className)
E_Sorl 2008-01-11
  • 打赏
  • 举报
回复

public object GetClassByName(string className)
{
string assemblyName = GetType().Assembly.FullName;
string currentNameSpace = GetType().Namespace;
return AppDomain.CurrentDomain.CreateInstanceAndUnwrap(assemblyName, currentNameSpace + "." + className);//这里有问题吧,这个currentNameSpace并不是className代表的类的命名空间
}

public object InvokeFunc(string className, string functionName, object[] args)
{
object result = null;
object obj = GetClassByName(className);
if (obj != null)
{
result = obj.GetType().GetMethod(functionName).Invoke(obj, args);
}

return result;
}


E_Sorl 2008-01-10
  • 打赏
  • 举报
回复
Erice 2008-01-10
  • 打赏
  • 举报
回复
如果不是动态加载的

那么 直接 Type classType=Type.GetType(fullName); //包含包名称
object classInstance= Activator.CreateInstance(classType)

如果是动态的,需要先加入资源,然后进行下步操作
LeoMaya 2008-01-10
  • 打赏
  • 举报
回复

public object GetClassByName(string className)
{
string assemblyName = GetType().Assembly.FullName;
string currentNameSpace = GetType().Namespace;
return AppDomain.CurrentDomain.CreateInstanceAndUnwrap(assemblyName, currentNameSpace + "." + className);
}

public object InvokeFunc(string className, string functionName, object[] args)
{
object result = null;
object obj = GetClassByName(className);
if (obj != null)
{
result = obj.GetType().GetMethod(functionName).Invoke(obj, args);
}

return result;
}
Erice 2008-01-10
  • 打赏
  • 举报
回复
Type   classType=Type.GetType(fullName);   //包含包名称 
object classInstance= Activator.CreateInstance(classType)


public T Invoker<T>(object classInstance, string methodName,object[] paras)
{
object result;
result =(T)classType.InvokeMember(methodName,BindingFlags.Instance |BindingFlags.Public |BindingFlags.InvokeMethod|BindingFlags.NonPublic,null,classInstance,paras);
return result;
}


代码只作参考,没有实际意义,你在这里问同时,我相信,你可以从书中得到答案

上述 使用的反射方法,可以支持重载的方法体。
gwl1984 2008-01-10
  • 打赏
  • 举报
回复
Type.InvokeMember方法,是反射常用的方法,可以对动态生成的实例的属性,字段进行操作,也可以对方法进行调用.
具体请看反射的相关内容.
gwl1984 2008-01-10
  • 打赏
  • 举报
回复
用invoke方法.
china_aspx 2008-01-10
  • 打赏
  • 举报
回复
顶上去
iceblockchina 2008-01-10
  • 打赏
  • 举报
回复
在GetClassByName里用反射创建类实例
myClassName obj = (myClassName)GetClassByName("myClassName");
obj.myFunc();
yilanwuyu123 2008-01-10
  • 打赏
  • 举报
回复
反射?很高深。Mark!
E_Sorl 2008-01-10
  • 打赏
  • 举报
回复
有没具体实现方法?
如完善下面代码:

public object GetClassByName(string className)
{
object o;
return o;
}

public void InvokeFunc()
{
object o=GetClassByName("myClassName");
o.myFunc();
}
E_Sorl 2008-01-10
  • 打赏
  • 举报
回复
反射,不懂
lovefootball 2008-01-10
  • 打赏
  • 举报
回复
这是反射的基础知识

你可以看看MSDN关于反射的帮助~~~~~~~~
lovefootball 2008-01-10
  • 打赏
  • 举报
回复
如果要调用该类的一方法(如myFunc()方法),该怎么办?
是否要先将object类型转换为该类类型?
-----》
不需要
参考MethodInfo.Invoke

大致如下:
classType.GetMethod("MethodName",BindingFlags.....).Invoke

E_Sorl 2008-01-10
  • 打赏
  • 举报
回复
怎么转?
只知道一个类的名称(string),还要执行该类的方法
E_Sorl 2008-01-10
  • 打赏
  • 举报
回复

Type classType=Type.GetType(fullName); //包含包名称
object classInstance= Activator.CreateInstance(classType)


如果要调用该类的一方法(如myFunc()方法),该怎么办?
是否要先将object类型转换为该类类型?

111,094

社区成员

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

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

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