在程序开发中,经常需要调用到外部的DLL,所以需要反射技术,动态的加载程序集,方便调用.
例如我们创建一个这样的类:

Code
namespace User
{
public class ShowName
{
public ShowName()
: this("")
{ }
public ShowName(string Name)
{
name = Name;
}
public string Name
{
get { return name; }
set { name = value; }
}
private string name;
public void ShowMe()
{
Console.WriteLine("I'm " + name);
}
public static int Main()
{
Console.WriteLine("location in User");
return 0;
}
}
}
在一般情况下,我们只需要在代码中这样调用就可以:

Code
public class Program
{
static void Main(string[] args)
{
ShowName sn = new ShowName("Alex");
sn.ShowMe();
Console.ReadLine();
}
}
如果需要在程序运行时动态加载,就需要用到Assembly类来实现,注意:(把上面的第一段代码,生成一个叫User.Dll)
一、Assembly.Load
这个方法接受一个AssemblyName实例作为一个参数,返回对应的程序集,实现的方法如下:

Code
public class Program
{
static void Main(string[] args)
{
Assembly a = Assembly.Load("User");
Type t = a.GetType("User.ShowName");
foreach (MethodInfo mf in t.GetMethods())
{
Console.WriteLine(mf.Name); //输出User.dll里面的所有方法
}
object user = a.CreateInstance(t.FullName);
object[] name = new object[1]; //新建一个数组,把参数传进去
name[0] = "Alex";
MethodInfo setname = t.GetMethod("set_Name"); //这个set_Name就是Name的set方法
setname.Invoke(user, name); //这里把name参数传进去
MethodInfo show = t.GetMethod("ShowMe");
show.Invoke(user, null);
Console.ReadLine();
}
}
这里输出的结果为:
get_Name
set_Name
ShowMe
Main
ToString
Equals
GetHashCode
GetType
I'm Alex
二、Assembly.LoadForm方法
该方法根据程序集的文件名与路径来加载程序集。
三、Assembly.LoadWithPartialName方法
该方法使用部分名称从应用程序目录或从全局程序集缓存加载程序集。
当然还要他们还可以实现部分引用,也就是可以通过程序集的名称,版本,公钥等等,只要在后面加上
Assembly a = Assembly.Load("User,version=1.0.0.0")来控制就可以了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?