c# 反射(三)

转载 2007年09月18日 13:58:00

6、如何获取方法以及动态调用方法

        上面是一个简单的类,包含一个有参数的构造器,一个GetValue的方法,一个Value属性,我们可以通过方法的名称来得到方法并且调用之,如:

属性与方法的调用大同小异,大家也可以参考MSDN

//获取类型信息
Type   t   =   Type.GetType("TestSpace.TestClass");
//构造器的参数
object[]   constuctParms   =   new   object[]{"timmy"};
//根据类型创建对象
object   dObj   =   Activator.CreateInstance(t,constuctParms);
//获取方法的信息
MethodInfo   method   =   t.GetMethod("GetValue");
//调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值
BindingFlags   flag   =   BindingFlags.Public   |   BindingFlags.Instance;
//GetValue方法的参数
object[]   parameters   =   new   object[]{"Hello"};
//调用方法,用一个object接收返回值
object   returnValue   =   method.Invoke(dObj,flag,Type.DefaultBinder,parameters,null);

       

7、动态创建委托
        委托是C#中实现事件的基础,有时候不可避免的要动态的创建委托,实际上委托也是一种类型:System.Delegate,所有的委托都是从这个类派生的
        System.Delegate
提供了一些静态方法来动态创建一个委托,比如一个委托:

namespace   TestSpace   {
      
delegate   string   TestDelegate(string   value);
      
public   class   TestClass   {
public   TestClass()   {
                  }

                  
public   void   GetValue(string   value)   {
                          
return   value;
                  }

        }

}


使用示例:

TestClass   obj=  new TestClass();
//获取类型,实际上这里也可以直接用typeof来获取类型
Type   t   =   Type.GetType(“TestSpace.TestClass”);
//创建代理,传入类型、创建代理的对象以及方法名称
TestDelegate   method   =   (TestDelegate)Delegate.CreateDelegate(t,obj,”GetValue”);

String   returnValue   
=   method(“hello”);

 

namespace   TestSpace
{
     
public   class   TestClass  
     
{
          
private   string   _value;
          
public   TestClass()   
          
{
          }

          
public   TestClass(string   value)  
          
{
                _value   
=   value;
          }


          
public   string   GetValue(   string   prefix   )   
          
{
              
if(   _value==null   )
                 
return   "NULL";
              
else
                 
return   prefix+"   :   "+_value;
            }


            
public   string   Value   
            
{
               
set   {_value=value;}
               
get   {
                    
if(   _value==null   )
                         
return   "NULL";
                    
else
                          
return   _value;
            }

         }

      }

}



相关文章推荐

C#反射概念以及实例详解

C#反射的入门学习首先要明白C#反射提供了封装程序集、模块和类型的对象等等。那么这样可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中...

c#反射教程(菜鸟)

  • 2011-04-06 17:20
  • 16KB
  • 下载

C#中使用typeof关键字和GetType()获取类的内部结构(反射机制)

一、问题描述 java有反射机制,C#也有反射机制,在C#中typeof关键字用于获取类型的System.Type对象,该对象的GetMethods()方法可以得到类型中定义的方法对象的计集合,调用方...

c#反射例子(源码)

  • 2008-10-06 08:56
  • 65KB
  • 下载

详解C#中的反射(笔记)

原文地址 : 详解c#中的反射 反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1、B超:大家体检的时候大概都做过B超吧,B超可以透...

C#实现反射实例和软件

  • 2008-11-12 05:01
  • 137KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)