• 简单反射实例


    今天中午吃饭,突然有同事谈到不知道程序集名是否也可以调用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

    示例源代码:反射示例

  • 相关阅读:
    更改sql server数据库所有者的对象
    对C#委托及事件委托的理解
    印度人是怎样开发软件的?
    SQL常用函数
    Ajax学习1
    Ajax学习2
    什么是ORM?
    jQuery 移动网页到制定的位置
    Juery 控件的取值赋值
    js禁用滚动条
  • 原文地址:https://www.cnblogs.com/tqlin/p/1793067.html
Copyright © 2020-2023  润新知