zoukankan      html  css  js  c++  java
  • 简单反射实例

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

    示例源代码:反射示例

  • 相关阅读:
    hdu 5007 水题 (2014西安网赛A题)
    hdu 1698 线段树(成段替换 区间求和)
    poj 3468 线段树 成段增减 区间求和
    hdu 2795 公告板 (单点最值)
    UVaLive 6833 Miscalculation (表达式计算)
    UVaLive 6832 Bit String Reordering (模拟)
    CodeForces 124C Prime Permutation (数论+贪心)
    SPOJ BALNUM (数位DP)
    CodeForces 628D Magic Numbers (数位DP)
    POJ 3252 Round Numbers (数位DP)
  • 原文地址:https://www.cnblogs.com/tqlin/p/1793067.html
Copyright © 2011-2022 走看看