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#】C#之类

类 一、对象 把一个东西看成对象,我们就可以独立的去审查它的性质,它的行为,进而研究它和其他对象的关系。同样,在程序中使用对象的概念,就让我们可以把一个程序看成是很多对象相互作用的结果。对象有属性...
  • binggetong
  • binggetong
  • 2015年10月31日 10:39
  • 497

编写高效率的C#代码

周末空闲,选读了一下一本很不错的C#语言使用的书,特此记载下便于对项目代码进行重构和优化时查看。 Standing On Shoulders of Giants,附上思维导图,其中标记的颜色越深表示...
  • Robin022
  • Robin022
  • 2017年04月07日 07:34
  • 802

关于c#中的事件

c#事件学习
  • Joyhen
  • Joyhen
  • 2013年01月14日 11:32
  • 9198

C#安装和基础学习

C#安装学习C#视频链接:http://www.bilibili.com/video/av1422127/可以到官网查看安装包或百度下载 下载地址:https://www.visualstudio....
  • liuzp111
  • liuzp111
  • 2016年11月01日 23:21
  • 898

C#使用Tesseract OCR 解析验证码

之前我在C#简单数字验证码解析>>一文中介绍了用C#识别简单不变形数字验证码,但是对于识别变形的 或生成位置变化比较频繁的 验证码的准确率却不高。 下面介绍一个开源的OCR引擎Tesseract2...
  • xwx1122
  • xwx1122
  • 2014年12月25日 16:08
  • 2352

C#中的Attribute详解(下)

从上篇里我们可以看到,Attribute似乎总跟public、static这些关键字(Keyword)出现在一起。莫非使用了Attribute就相当于定义了新的修饰符(Modifier)吗?让我们一窥...
  • xiaouncle
  • xiaouncle
  • 2017年04月18日 16:04
  • 1667

C#操作符??和?:用法

先看如下代码:   string strParam =Request.Params["param"]; if ( strParam== null ) {    strParam= ""; }   st...
  • lybwwp
  • lybwwp
  • 2016年05月05日 17:47
  • 2483

java与C#的比较

一、C#和java哪个更好?        几天前,我的北理工研究生面试,老师问了我这样一个问题,你认为C#和java哪个更好?那么,作为读者的你,会怎么回答这道题呢?        其实,在我看来,...
  • lu930124
  • lu930124
  • 2016年01月16日 10:34
  • 18419

关于C# 中的封装

今天开始关于深入.NET平台与C#编程的学习,第一章中讲到关于封装的概念及应用,部分学员感觉比较的抽象,现在将C#中的封装相关的知识点整理了一下,希望能对你的学习带来帮助。 封装的概念 ...
  • 279503482
  • 279503482
  • 2014年03月07日 13:06
  • 3453

C# in关键字你造吗

上下文in关键字大致有三种 第一:在foreach中使用 用于遍历数组或集合foreach 语句对实现 System.Collections.IEnumerable 或 System.Co...
  • w200221626
  • w200221626
  • 2016年08月30日 17:21
  • 2623
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#的反射详解(二)
举报原因:
原因补充:

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