码迷,mamicode.com
首页 > Windows程序 > 详细

C# 通过反射类动态调用DLL方法

时间:2014-10-28 17:11:18      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   io   color   os   ar   使用   for   

网上看了很多关于反射的思路和方法,发现这个还算不错

//使用反射方:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //声明一个反射类对象
            Assembly a;

            //让这个对象加载某个外部dll程序集信息.
            a = Assembly.LoadFile(@"C:\Users\正月龙\Desktop\Person\Person\bin\Debug\Person.dll");
            //反射出该dll程序集的名称信息.
            Console.WriteLine(a.GetName());
            Console.ReadKey();
            
            //定义一个"类型信息"的对象.
            Type t = a.GetType("Person.Person", false, true);
            
            //定义一个成员信息类对象数组,并从程序集中获取.
            MemberInfo[] info = t.GetMembers();
            
            //逐个返回成员的名字.
            foreach (MemberInfo inf in info)
            {
                Console.WriteLine(inf.Name);
            }
            Console.ReadKey();

            //定义一个成员方法对象,这里是指定方法名称来获取的.
            MethodInfo method = t.GetMethod("show");
            
            //定义一个查询构造函数的对象,获取时需给定签名.
            ConstructorInfo coninfo = t.GetConstructor(new Type[] { typeof(int), typeof(string) });
            
            //这里准备两个参数,封装为一个具有两个对象的数组.
            object[] arg = new object[2] { 10, "dog" };
            
            //调用构造函数并赋值给一个对象.
            object o = coninfo.Invoke(arg);
            
            //调用对象的方法
            method.Invoke(o, null);
            
            //这是第二种调用对象的方法.都可以.
            method.Invoke(o, BindingFlags.Public | BindingFlags.Instance , Type.DefaultBinder, null, null);

            Console.ReadKey();
        }
    }
}

 

//被查询或被调用方

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Person
{
    public class Person
    {
        private int int_a;
        private string str_a;
        
        public Person()
        { 
        
        }

        public Person(int a,string b)
        {
            this.int_a = a;
            this.str_a = b;
        }

        public void show()
        {
            Console.WriteLine(int_a.ToString()+":"+str_a);
            Console.ReadKey();
        }
    }
}

 

C# 通过反射类动态调用DLL方法

标签:des   style   blog   io   color   os   ar   使用   for   

原文地址:http://www.cnblogs.com/bohetang/p/4057175.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!