110,536
社区成员
发帖
与我相关
我的任务
分享
public string className{get;private set;} //存储需要反射的类名("Class_B1"、"Class_B2"等)
public Interface_A1 myInterface{get;private set;} //存储通过className反射后的类的实例
Calss_A2 Func(List<Class_A2> para);
namespace Project2
{
public interface ITest:
{
bool IsEven(int num);
}
}
--------------------------------------------分割线----------------------------------------------------------
现在我有一个类,是在项目Project1中的(会生成Project1.DLL),Project1引用了Project2,实现了ITest接口,定义如下:
namespace Project1
{
public class ReflectTest:ITest
{
public ReflectTest()
{
Console.WriteLine("无参构造");
}
public ReflectTest(object para)
{
Console.WriteLine("有参构造");
}
public bool IsEven(int num)
{
return num%2==0;
}
}
}
--------------------------------------------分割线----------------------------------------------------------
我写了如下的帮助类,专门通过反射来加载某个类,并调用方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
namespace CommonLibrary
{
/// <summary>
/// DLL反射加载类
/// </summary>
public class DLLReflect
{
private Assembly assembly;
private Type type;
private string strClass;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="dllFile">DLL文件路径(必须为完整的绝对路径)</param>
/// <param name="nameSpace">命名空间</param>
/// <param name="className">类名</param>
public DLLReflect(string dllFile, string nameSpace, string className)
{
if (File.Exists(dllFile) == false)
{
throw new FileNotFoundException("文件不存在", dllFile);
}
else
{
assembly = Assembly.LoadFile(dllFile);
strClass = string.Format("{0}.{1}", nameSpace, className);
type = assembly.GetType(strClass, true, true);
}
}
/// <summary>
/// 调用实例方法
/// </summary>
/// <param name="methodName">方法名</param>
/// <param name="paras">参数</param>
/// <returns></returns>
public object InstanceInvoke(string methodName, params object[] paras)
{
MethodInfo method = type.GetMethod(methodName);
object obj = assembly.CreateInstance(strClass, true);
return method.Invoke(obj, paras);
}
/// <summary>
/// 调用静态方法
/// </summary>
/// <param name="methodName">方法名</param>
/// <param name="paras">方法参数</param>
/// <returns></returns>
public object StaticInvoke(string methodName, params object[] paras)
{
MethodInfo method = type.GetMethod(methodName);
return method.Invoke(null, paras);
}
}
}
--------------------------------------------分割线----------------------------------------------------------
现在在Project2中,我想通过反射的方式得到Project1中的ReflectTest类的实例,
比如在Project2中的某类中有
public ITest myTest;
那么我想通过反射加载出ReflectTest,获取到它的,然后赋值给myTest,可以实现吗?
如果可以,需要怎么写呀?这个还真的需要代码,实在是在想不出来!
如果不可以,还请明示为什么?
Assembly.LoadFrom("").CreateInstance
反射就这么一回事啊