简单反射实例

今天中午吃饭,突然有同事谈到不知道程序集名是否也可以调用DLL的公开方法。当时哑了,好久没弄过反射,印象模糊了。回来试了一下,其实只要知道DLL的命名空间和要调用的方法的类名就可以调用该方法了(注:非同一命名空间下,该DLL的类和方法必须是公开的)。示例代码如下:

创建一个类库,名称为DemoLB,创建一个类Class1,写个公开方法Print(),该方法很简单,就是定义一个整数,然后输出它的类型。

代码
namespace DemoLB
{
    
public class Class1
    {
        
public void Print()
        {
            
int i = 42;
            System.Type type 
= i.GetType();
            Console.WriteLine(type);
        }
    }
}

将上面代码编译生成DemoLB.dll

创建CSharpReflection控制台项目,将DemoLB.dll拷贝到CSharpReflection项目的Bin目录,示例代码如下:

代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection; //引入反射命名空间

namespace CSharpReflection
{
    
class Program
    {
        
static void Main(string[] args)
        {
            Assembly assembly 
= Assembly.LoadFrom("DemoLB.dll");  //动态创建程序集

            
object obj = Activator.CreateInstance(assembly.GetType("DemoLB.Class1"));  //动态创建对象
            DemoLB.Class1 demo = obj as DemoLB.Class1;  //转换成Class1类
            Console.WriteLine(assembly.GetName());  //输出程序集名称
            demo.Print();   //调用DemoLB.dll的Print方法
            
            Console.Read();
        }
    }
}

参考资料:http://msdn.microsoft.com/zh-cn/library/ms173183(VS.80).aspx

示例源代码:反射示例

原文地址:https://www.cnblogs.com/tqlin/p/1793067.html