C#的反射详解(二)

转载 2007年09月22日 00:50:00
2。动态添加和使用类型

反射提供了由语言编译器(例如 Microsoft Visual Basic .NET 和 JScript)用来实现隐式晚期绑定的基础结构。绑定是查找与唯一指定的类型相对应的声明(即实现)的过程。由于此过程在运行时而不是在编译时发生,所以称作晚期绑定。Visual Basic .NET 允许您在代码中使用隐式的晚期绑定;Visual Basic 编译器将调用一个帮助器方法,该方法使用反射来获取对象类型。传递给帮助器方法的参数有助于在运行时调用正确的方法。这些参数包括:对其调用方法的实例(对象),被调用方法的名称(字符串),以及传递给被调用方法的参数(对象数组)。

 
以下示例是动态调用动态链接库中的GetDataSet方法,该方法需要参数string userID

 

 
 
3. 访问自定义属性
       访问自定义属性和动态添加和使用类型一样.
 /// <summary>
        
/// 执行公式的运算
        
/// </summary>
        
/// <param name="value">需要计算的原始值</param>
        
/// <param name="assessment">考核名称</param>
        
/// <returns></returns>

        public float ExeExpression(string assessment, params object[] values)
        
{

            
string expression = this.GetExpression(assessment);
            
//从当前应用程序加载此dll  
            string path = "";
            
if (System.Environment.CurrentDirectory + @"" == AppDomain.CurrentDomain.BaseDirectory)//Windows应用程序则相等
            {
                path 
= AppDomain.CurrentDomain.BaseDirectory;
            }

            
else
            
{
                path 
= AppDomain.CurrentDomain.BaseDirectory + @"Bin";
            }

            
string dllPath = path + expression + ".dll";
            System.Reflection.Assembly assmble 
= System.Reflection.Assembly.LoadFile(dllPath);

            
string typeFullName = expression + ".ExpressionClass";
            Type tmpType 
= assmble.GetType(typeFullName);
            System.Reflection.MethodInfo tmpMethod 
= tmpType.GetMethod("ExeExpression");
            System.Reflection.PropertyInfo tmpProperty 
= tmpType.GetProperty("ConnectionString");

            
//创建对象,设置属性值,并调用方法
            object tmpobj = assmble.CreateInstance(typeFullName);
            tmpProperty.SetValue(tmpobj, connectionString, 
null);
            
float result = 0;
            result 
= (float)tmpMethod.Invoke(tmpobj, values);
            
return result;

        }
Assembly assembly; 
Type type; 

string dllPath = @"D: estPowerSpace.VCP.Utility.dll"
try 


     assembly 
= Assembly.LoadFile(dllPath); 
     type 
= assembly.GetType("PowerSpace.VCP.Utility.cMyString",true,true);//cMyResult 
}
 
catch(FileNotFoundException) 


Response.Write(
"Could not load Assembly: ""+ dllPath +"""); 

     Return 
null

}
 
catch(TypeLoadException) 



Response.Write(
"Could not load Type: "string"   from assembly: "" + dllPath + """); return null


}
 

MethodInfo method 
= type.GetMethod("TestInvoke"); 

object obj = Assembly.GetAssembly(type).CreateInstance("PowerSpace.VCP.Utility.GetDataSet"); 


object s = method.Invoke(obj,new object[]{"jiangli"}); 

DataSet ss 
= (DataSet)s; 

assembly 
= null
type 
= null
method 
=null
return ss; 


 

 
 

相关文章推荐

c# 反射详解

  • 2014-11-14 22:05
  • 404KB
  • 下载

关于C#的反射机制详解

  • 2013-06-19 13:39
  • 33KB
  • 下载

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

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

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

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

详解C#中的反射 .

反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1、B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况...

C#反射(Reflection)详解

原文地址:http://www.cnblogs.com/wangshenhe/p/3256657.html 本人理解: 装配件:Assembly(程序集) 晚绑定:后期绑定 MSD...

[整理]C#反射(Reflection)详解

本人理解: 装配件:Assembly(程序集) 晚绑定:后期绑定 MSDN:反射(C# 编程指南) -----------------原文如下-------- 1、 什么是反射 2、 命名...

详解C#中的反射

什么是反射(Reflection) 两个现实中的例子: 1、B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况。这是如何做到的呢?B超是B型超声波,它可以透过肚皮...

详解C#编程中的反射机制与方法

Reflection,中文翻译为反射。这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射...

c# 反射使用及详解

获取成员变量的方式有两种typeof(T).GetPropertys(BindingFlags 参数) // 这中方式获取的成员变量一定要是实现了 get set 存储器的变量typeof(T).Ge...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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