Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
尚未分类 LINQ教程 Enterprise技术 性能优化/调试 水晶报表与打印 安全与加密 图形图像 文件处理基础教程 Web Services 内置对象 控件示例 正则表达式\采集 ADO.NET 缓存\泛型\线程 XML技术 Url重写\静态页 vs2008综合教程
当前位置: 主页 > ASP.NET教程 > 基础教程 >

Type类的使用

时间:2010-02-25 21:44来源:未知 作者:admin 点击:

项目中要用到动态调用类的方法,去网上找了点代码,总算是弄明白了,不过传参数有点麻烦,这里差个master类,未注释的代码都经过测试了,注释的部分摘自互联网!在此记录方便自己以后查找

using System;
using System.Threading;
using System.Reflection;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Type t = typeof(king.master);
        Response.Write("数据类型名:"+t.Name); Response.Write("<br/>");
        Response.Write("数据类型的完整限定名:" + t.FullName);
        Response.Write("<br/>");
        Response.Write("数据类型的命名空间:" + t.Namespace);
        Response.Write("<br/>");
        string[] aa=new string[0];
        object obj = t.InvokeMember("", BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.Public, null,null, new string[0]);

        //调用无返回的无参数的方法
        t.InvokeMember("delete", BindingFlags.InvokeMethod| BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public, null, obj, new string[0]);
        //调用有返回的无参数的方法
        Response.Write(t.InvokeMember("Add", BindingFlags.InvokeMethod | BindingFlags.Instance|BindingFlags.Public,null, obj, new string[0]));
        //调用有返回的有参数的方法
        Response.Write(t.InvokeMember("update", BindingFlags.InvokeMethod | BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public, null, obj, new object[]{100,"aaaaa"}));

        MemberInfo[] menbers = t.GetMembers();
        foreach (MemberInfo nextmember in menbers)
        {
            Response.Write(nextmember.Name + "<br>");
        }

 

        ////设置属性值

        //type.InvokeMember("Name", BindingFlags.SetProperty, null, obj, new string[] { "abc" });

        ////获取属性值

        //string str = (string)type.InvokeMember("Name", BindingFlags.GetProperty, null, obj, null);

        //Console.WriteLine(str);

 

        ////设置字段值

        //type.InvokeMember("field1", BindingFlags.SetField, null, obj, new object[] { 444 });

 

        ////获取字段值

        //int f = (int)type.InvokeMember("field1", BindingFlags.GetField, null, obj, null);

        //InvokeMember方法参数

        //name
        //String,它包含要调用的构造函数、方法、属性或字段成员的名称。
        //- 或 - 空字符串 (""),表示调用默认成员。
        //- 或 -对于 IDispatch 成员,则为一个表示 DispID 的字符串,例如“[DispID=3]”。

        //invokeAttr
        //一个位屏蔽,由一个或多个指定搜索执行方式的 BindingFlags 组成。访问可以是 BindingFlags 之一,如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public |BindingFlags.Instance。

        //binder
        //一个 Binder 对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
        //- 或 - 若为 空引用(在 Visual Basic 中为 Nothing),则使用 DefaultBinder。

        //target
        //要在其上调用指定成员的 Object。

        //args
        //包含传递给要调用的成员的参数的数组。

        //modifiers
        //ParameterModifier 对象数组,表示与 args 数组中的相应元素关联的属性 (Attribute)。参数的关联的属性 (Attribute) 存储在成员的签名中。默认的联编程序不处理此参数。

        //culture
        //表示要使用的全局化区域设置的 CultureInfo 对象,它对区域设置特定的转换可能是必需的,比如将数字 String 转换为 Double。
        //- 或 - 空引用(在 Visual Basic 中为 Nothing),表示使用当前线程的 CultureInfo。

        //namedParameters
        //包含参数名称的数组,args 数组中的值被传递给这些参数。

        //返回值
        //表示被调用成员的返回值的 Object。

        // 备注
        //InvokeMember 调用构造函数成员或方法成员,获取或设置属性成员,获取或设置数据字段成员,或者获取或设置数组成员的元素。

        //当调用 IDispatch 成员时,可以使用字符串格式“[DispID=##]”指定 DispID 而非成员名称。例如,如果 MyComMethod 的 DispID 为 3,则可以指定字符串“[DispID=3]”而不是“MyComMethod”。按 DispID 调用成员比按名称查找成员快。在复杂的聚合方案中,DispID 有时是调用所需成员的唯一方式。

        //尽管默认的联编程序不处理 ParameterModifier 或 CultureInfo(modifiers 和 culture 参数),您仍然可以使用抽象 System.Reflection.Binder 类编写会处理 modifiers 和 culture 的自定义联编程序。仅当通过 COM interop 进行调用时才使用 ParameterModifier,并且仅处理通过引用传递的参数。

        //args 数组和 modifiers 数组的长度相同。args 数组中指定的参数可具有下列在 modifiers 数组中指定的属性 (Attribute):pdIn、pdOut、pdLcid、pdRetval、pdOptional 和 pdHasDefault,它们分别表示 [In]、[Out]、[lcid]、[retval]、[optional] 和一个指定参数是否有默认值的值。参数的关联属性 (Attribute) 存储在元数据中并且增强了交互操作。

        //namedParameters 数组中的每一个参数获取 args 数组中相应元素中的值。如果 args 的长度大于 namedParameters 的长度,则按顺序传递剩余的参数值。

        //下列 BindingFlags 筛选标志可用于定义包含在搜索中的成员:

        //为了获取返回值,必须指定 BindingFlags.Instance 或 BindingFlags.Static。

        //指定 BindingFlags.Public 可在搜索中包含公共成员。

        //指定 BindingFlags.NonPublic 可在搜索中包含非公共成员(即私有成员和受保护的成员)。

        //指定 BindingFlags.FlattenHierarchy 可包含层次结构上的静态成员。

        //下列 BindingFlags 修饰符标志可用于更改搜索的执行方式:

        //BindingFlags.IgnoreCase,表示忽略 name 的大小写。

        //BindingFlags.DeclaredOnly,仅搜索 Type 上声明的成员,而不搜索被简单继承的成员。

        //可以使用下列 BindingFlags 调用标志表示要对成员采取的操作:

        //CreateInstance,表示调用构造函数。忽略 name。对其他调用标志无效。

        //InvokeMethod,表示调用方法,而不调用构造函数或类型初始值设定项。对 SetField 或 SetProperty 无效。

        //GetField,表示获取字段值。对 SetField 无效。

        //SetField,表示设置字段值。对 GetField 无效。

        //GetProperty,表示获取属性。对 SetProperty 无效。

        //SetProperty 表示设置属性。对 GetProperty 无效。   

}
}

(责任编辑:admin)
Tags:Type类
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价
  • C#中Dictionary、ArrayList、Hashtable和数组Array

    C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue 1.数组是固定大小的,不能伸缩。虽然S...

  • PictureBox内的图片拖动功能

    当 PictureBox内的图片太大,超过PictureBox边框时可以用下面的方法来实现, 通过重绘来实现 : Code bool wselected = f...

  • Directory.GetCurrentDirectory和Application.

    System.IO.Directory.GetCurrentDirectory()方法用于获得应用程序当前工作目录。 System.Windows.Forms....

  • IConvertible接口

    IConvertible 接口 定义特定的方法,这些方法将实现引用或值类型的值转换为具有等效值的公共语言运行库类型。 命名空间: System 程序集: msc...

  • 将枚举类型的数据绑定到控件

    .NET Framework中的数据绑定有几个很酷的功能。你不仅可以将集合、数组、DataTable和DataView对象绑定到列表绑定(list-bound)...

  • 数组求和算法系列

    一直想写一个数组求和算法系列博客,但由于自己算法能力有限,完成不了,只能完成其中简单的部分,难的部分希望有园友愿意和我一起完成。在写这篇博客的过程中借用了别人的...

  • 细说C#构造器

    1.实例构造器和类 构造器是允许将类型的实例化为良好的状态的一种特殊方法。 当创建一个类型的实例时: 1)为实例的字段分配内存。 2)初始化对象的附加字段(类型...

  • 对象的序列化存入数据库,与反序列化

    开发过程中遇到一个问题,我想到的解决方法是将一个dictionary字典如何存如数据库,读出来的时候还是这个字典 然后接触到对象的序列化与反序列化。开始打算序列...

  • const限定修饰符用法总结(常量,指针,迭代器,函数参数,成员函数)

    const限定修饰符用法总结(常量,指针,迭代器,函数参数,成员函数)...

  • 回文算法

    回文:针对于字符串的中间位置两边对应位置相等。对于长度为n的字符串,需要比较的次数为N/2。 用2种方法对该应用实现算法如下: 1:采用字符串的substrin...

  • c# MACD算法实现

    c# MACD算法实现...

  • c#自杀程序的关键方法

    public static void TestForKillMyself() { string bat=@@echooff :tryagain del%1 if...

  • 对泛型进行反射

    今天在用反射的时候突然想到,之前从来没有对泛型对象进行反射,故决定尝试一下 首先要获取某个泛型类的Type,键入如下代码: Typet=Type.GetType...

  • C#遍历文件夹

    DirectoryInfo FileName = new DirectoryInfo( @D:\ ); 2 foreach (DirectoryInfo Nex...

  • .NET对象序列化—TimeSpan

    在 WebServices 中, TimeSpan 不能作为系统的 TimeSpan 作为参数,在客户端会生成新的 TimeSpan 类。 一、问题重现 创建一...