关闭

反射 学习用例

774人阅读 评论(0) 收藏 举报

第一步:新建一个类库项目,命名“ReflectionExample” ,代码:

using System;
namespace ReflectionExample
{
    
public class HelloWorld
    {
        
string myName = null;
        
public HelloWorld(string name)
        {
            myName 
= name;
        }
        
public HelloWorld()
            : 
this(null)
        { }
        
public string Name
        {
            
get
            {
                
return myName;
            }
        }
        
public void SayHello()
        {
            
if (myName == null)
            {
                System.Console.WriteLine(
"Hello World");
            }
            
else
            {
                System.Console.WriteLine(
"Hello," + myName);
            }
        }
    }
}

编译,生成一个ReflectionExample.dll文件.

第二步:新建一个项目,命名“Reflection”,添加引用“ReflectionExample.dll”

 

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

namespace ReflectionExample
{
    
class Class1
    {
        
//[STAThread]
        static void Main(string[] args)
        {
            System.Console.WriteLine(
"列出程序集中的所有类型");
            Assembly a 
= Assembly.LoadFrom("ReflectionExample.dll");
            Type[] mytypes 
= a.GetTypes();

            
foreach (Type t in mytypes)
            {
                System.Console.WriteLine(t.Name);
            }
            System.Console.ReadLine();
            Console.WriteLine(
"ManifestModule,获取该程序清单的模块:{0}", a.ManifestModule);
            Console.ReadLine();
            Console.WriteLine(
"CodeBase,获取最初指定程序集的位置:{0}", a.CodeBase);
            Console.ReadLine();
            Console.WriteLine(
"Entry point,获取此程序集的入口点:{0}", a.EntryPoint);
            Console.ReadLine();
            System.Console.WriteLine(
"列出HellWord中的所有方法");
            Type ht 
= typeof(HelloWorld);
            MethodInfo[] mif 
= ht.GetMethods();
            
foreach (MethodInfo mf in mif)
            {
                System.Console.WriteLine(mf.Name);
            }
            System.Console.ReadLine();
            System.Console.WriteLine(
"实例化HelloWorld,并调用SayHello方法");
            Object obj 
= Activator.CreateInstance(ht);
            
string[] s = { "zhenlei" };
            Object bojName 
= Activator.CreateInstance(ht, s);
            BindingFlags flags 
= (BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            MethodInfo msayhello 
= ht.GetMethod("SayHello");
            msayhello.Invoke(obj, 
null);
            msayhello.Invoke(bojName, 
null);
            System.Console.ReadLine();
        }
    }
}

运行结果是:

结果

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:155319次
    • 积分:1461
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:14篇
    • 译文:0篇
    • 评论:23条
    文章分类
    最新评论