利用Assembly动态加载程序集

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

ContractedBlock.gif ExpandedBlockStart.gif 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;
        }
    }
   
}

在一般情况下,我们只需要在代码中这样调用就可以:

ContractedBlock.gif ExpandedBlockStart.gif Code
    public class Program
    {
        
static void Main(string[] args)
        {
            ShowName sn 
= new ShowName("Alex");
            sn.ShowMe();
            Console.ReadLine();            
        }
    }

如果需要在程序运行时动态加载,就需要用到Assembly类来实现,注意:(把上面的第一段代码,生成一个叫User.Dll)
一、Assembly.Load
这个方法接受一个AssemblyName实例作为一个参数,返回对应的程序集,实现的方法如下:
ContractedBlock.gif ExpandedBlockStart.gif 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")来控制就可以了

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值