反射技术示例

1.2 反射技术示例  
       
下面是反射技术的示例,我们可以在程序去得时动态实例化对象,获得对象的属性,并调用对象的方法。

using System;

using System.Collections.Generic;

using System.Text;

 

namespace ReflectionDemo

{

    public class HelloWorld

    {

        private string strName = null;

        public HelloWorld(string name)

        {

            strName = name;

        }

        public HelloWorld()

        {

        }

        public string Name

        {

            get

            {

                return strName;

            }

        }

        public void SayHello()

        {

            if (strName == null)

            {

                System.Console.WriteLine("Hello World");

            }

            else

            {

                System.Console.WriteLine("Hello World,"+strName);

            }

        }

 

    }

}

using System;

using System.Collections.Generic;

using System.Text;

using System.Reflection;

 

namespace ReflectionDemo

{

        class Program

        {

            static void Main(string[] args)

            {

                System.Console.WriteLine("列出程序集中的所有类型");

                Assembly a = Assembly.LoadFrom ("ReflectionDemo.exe");

                Type[] mytypes = a.GetTypes( );

 

                foreach (Type t in mytypes)

                {

                  System.Console.WriteLine ( t.Name );

                }

                System.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 objName = 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(objName,null);

                System.Console.ReadLine();

 

                }

            }

    }

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值