相关文章推荐
礼貌的木瓜  ·  Package natbib Error: ...·  3 月前    · 
酒量小的葡萄酒  ·  源码分析 | ...·  1 年前    · 
勤奋的香槟  ·  python实践3:cursor() — ...·  1 年前    · 
狂野的日光灯  ·  Selenium ...·  1 年前    · 
个性的木耳  ·  錯誤訊息: Failure ...·  1 年前    · 
  1. 获取静态变量的FieldInfo对象,可以使用Type类的GetField方法,传入变量名和BindingFlags.Static标志来获取静态变量的FieldInfo对象。

  2. 使用FieldInfo对象的SetValue方法,传入目标对象(null表示静态变量)、新值来修改静态变量的值。

  3. using System;
    using System.Reflection;
    public static class MyClass
        public static int MyStaticVar = 1;
    class Program
        static void Main(string[] args)
            FieldInfo field = typeof(MyClass).GetField("MyStaticVar", BindingFlags.Static | BindingFlags.Public);
            field.SetValue(null, 2);
            Console.WriteLine(MyClass.MyStaticVar); // output: 2
    }

    在这个示例中,我们获取了MyClass类中名为MyStaticVar的静态变量的FieldInfo对象,然后使用SetValue方法将它的值修改为2。

获取静态变量的FieldInfo对象,可以使用Type类的GetField方法,传入变量名和BindingFlags.Static标志来获取静态变量的FieldInfo对象。在这个示例中,我们获取了MyClass类中名为MyStaticVar的静态变量的FieldInfo对象,然后使用SetValue方法将它的值修改为2。使用FieldInfo对象的SetValue方法,传入目标对象(null表示静态变量)、新值来修改静态变量的值。
两个现实中的例子: 1、B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况。这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时候就会产生一定的“回音” 反射 ,然后把“回音”进行处理就可以显示出内脏的情况了(我不是医生也不是声学专家,不知说得是否准确^_^)。 2、地球内部结构:地球的内部结构大体可以分为三层:地壳、地幔和地核。地壳是固体,地核是液体,地幔则是半液半固的结构(中学地理的内容,大家还记得吧?)。如何在地球表面不用深入地球内部就知道其内部的构造呢?对,向地球发射“地震波”,“地震波”分两种一种是“横波”,另一种是“纵波”。“横波”只能穿透固体,而“纵波”既可穿透固体又可以穿透液体。通过在地面对纵波和横波的反回情况,我们就可以大体断定地球内部的构造了。 大家注意到这两个例子的共同特点,就是从一个对象的外部去了解对象内部的构造,而且都是利用了波的 反射 功能。在.NET中的 反射 也可以实现从对象的外部来了解对象(或程序集)内部结构的功能,哪怕你不知道这个对象(或程序集)是个什么东西,另外.NET中的 反射 还可以运态创建出对象并执行它其中的方法。 反射 是.NET中的重要机制,通过 反射 ,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了 反射 ,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道。 反射 的用途: (1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。 (2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。 (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 (5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段 。 (6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和 反射 类型等,添加或移除事件处理程序。 (7)使用PropertyInfo了解属性的名称、数据类型、声明类型、 反射 类型和只读或可写状态等,获取或设置属性 。 (8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。 反射 用到的命名空间: System.Reflection System.Type System.Reflection.Assembly 反射 用到的主要类: System.Type 类--通过这个类可以访问任何给定数据类型的信息。 System.Reflection.Assembly类--它可以用于访问给定程序集的信息,或者把这个程序集加载到程序中。 System.Type类: System.Type 类对于 反射 起着核心的作用。但它是一个抽象的基类,Type有与每种数据类型对应的派生类,我们使用这个派生类的对象的方法、字段、属性来查找有关该类型的所有信息。 获取给定类型的Type引用有3种常用方式: ●使用 C# typeof 运算符。 Type t = typeof(string); ●使用对象GetType()方法。 string s = "grayworm"; Type t = s.GetType(); ●还可以调用Type类的静态方法GetType()。 Type t = Type.GetType("System.String"); 上面这三类代码都是获取string类型的Type,在取出string类型的Type引用t后,我们就可以通过t来探测string类型的结构了。 string n = "grayworm"; Type t = n.GetType(); foreach (MemberInfo mi in t.GetMembers()) Console.WriteLine("{0}/t{1}",mi.MemberType,mi.Name); Type类的属性: Name 数据类型名 FullName 数据类型的完全限定名(包括命名空间名) Namespace 定义数据类型的命名空间名 IsAbstract 指示该类型是否是抽象类型 IsArray 指示该类型是否是数组 IsClass 指示该类型是否是类 IsEnum 指示该类型是否是枚举 IsInterface 指示该类型是否是接口 IsPublic 指示该类型是否是公有的 IsSealed 指示该类型是否是密封类 IsValueType 指示该类型是否是 类型 Type类的方法: GetConstructor(), GetConstructors():返回ConstructorInfo类型,用于取得该类的构造函数的信息 GetEvent(), GetEvents():返回EventInfo类型,用于取得该类的事件的信息 GetField(), GetFields():返回FieldInfo类型,用于取得该类的字段(成员变量)的信息 GetInterface(), GetInterfaces():返回InterfaceInfo类型,用于取得该类实现的接口的信息 GetMember(), GetMembers():返回MemberInfo类型,用于取得该类的所有成员的信息 GetMethod(), GetMethods():返回MethodInfo类型,用于取得该类的方法的信息 GetProperty(), GetProperties():返回PropertyInfo类型,用于取得该类的属性的信息 可以调用这些成员,其方式是调用Type的InvokeMember()方法,或者调用MethodInfo, PropertyInfo和其他类的Invoke()方法。 查看类中的构造方法: NewClassw nc = new NewClassw(); Type t = nc.GetType(); ConstructorInfo[] ci = t.GetConstructors(); //获取类的所有构造函数 foreach (ConstructorInfo c in ci) //遍历每一个构造函数 ParameterInfo[] ps = c.GetParameters(); //取出每个构造函数的所有参数 foreach (ParameterInfo pi in ps) //遍历并打印所该构造函数的所有参数 Console.Write(pi.ParameterType.ToString()+" "+pi.Name+","); Console.WriteLine(); Student stu1 = new Student(); 现在,我们想通过 反射 在运python基础教程行时给stu1的name 和 age字段 赋 ,让name = “小明”,age = 15,怎么做? 简单的代码如下: using System.Reflection;// 反射 类 static void Main(string[] arg
《轻松学 C# (图解版)》完整扫描版================================================================ 作者:谷涛、扶晓、毕国锋 丛书名:轻松学 开发 出版社:电子工业出版社 ISBN:978-7-121-20223-0 出版日期:2013年6月 开本:16开 页码:408页 版次:1-1 定价:¥55.00 所属分类:计算机 > 软件与程序设计 > C# ================================================================ 本书由浅入深,全面、系统地介绍了 C# 程序设计。除了详细地讲解 C# 知识点外,本书还提供了大量的实例,供读者实战演练。本书共分三篇。第一篇是 C# 概述篇,主要介绍的是Visual Studio 2012的 开发 环境及搭建。第二篇是面向对象基础篇,主要介绍类、对象、字段、方法、流程控制、数组、继承、属性、运算符重载、接口等 C# 基本内容。第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、 反射 、特性、泛型、LINQ和数据库 开发 等。 ================================================================ 第一篇 C# 概述篇 第1章 C# 入门 2 1.1 C# 概述 2 1.1.1 C# 的发展 2 1.1.2 C# 开发 的基础 2 1.2 搭建 开发 环境 3 1.2.1 Visual Studio 2012软硬件配置要求 3 1.2.2 下载Visual Studio 2012 3 1.2.3 安装Visual Studio 2012 4 1.2.4 初始化配置 7 1.3 第一个程序—Hello World 8 1.4 小结 11 1.5 习题 12 第二篇 面向对象基础篇 第2章 类和对象 16 2.1 分析Hello World程序 16 2.2 语法规范 17 2.2.1 标识符 17 2.2.2 关键字 18 2.2.3 注释 19 2.3 定义类 20 2.4 实例化对象 20 2.5 小结 20 2.6 习题 21 第3章 定义类——字段 23 3.1 数据类型 23 3.1.1 简单 类型 23 3.1.2 的表示——字面量 26 3.1.3 转义序列 27 3.2 定义字段 27 3.2.1 定义字段 28 3.2.2 静态字段和实例字段的访问 28 3.2.3 字段初始化 29 3.2.4 字段的动态赋 ——Read()和ReadLine() 31 3.2.5 字段输出 31 3.2.6 格式化输出 32 3.2.7 数据类型转换 39 3.2.8 只读字段 41 3.2.9 访问控制 41 3.3 运算符 43 3.3.1 算术运算符 43 3.3.2 自增、自减运算符 44 3.3.3 复合赋 运算符 45 3.3.4 位运算符 46 3.3.5 sizeof运算符 47 3.3.6 运算符的优先级 47 3.4 小结 49 3.5 习题 49 第4章 定义类——方法 51 4.1 方法的概述 51 4.1.1 定义方法 51 4.1.2 方法的调用 52 4.2 方法体的构成 53 4.2.1 局部变量 53 4.2.2 局部变量与字段同名的解决——this关键字 54 4.2.3 语句 55 4.2.4 全局变量 55 4.3 返回 56 4.3.1 返回 类型 56 4.3.2 从方法返回 57 4.4 参数 58 4.4.1 参数的分类 58 4.4.2 引用参数(ref参数) 59 4.4.3 输出参数(out参数) 61 4.5 特殊的方法 62
C# 入门资料, 章.1⒈2第 I部分 C# 语 言.NET体系结构 …¨…¨∵¨…¨¨3 C# 与 .NET的 关系………………3公共 语言 运行库 …………………41.2.1 平台无关性……………………41,2,2 提高性能………………………41.2.3 语言 的互操作性……………¨5中间语 言 … ¨ ¨ … … … …… … …61.3.1 面向对象和接口的支持………61.32 不同的 类型和引用类型∴·…71,3.3 强数据类型化¨………………81.3.4 通过异常处理错误…¨……△21.3.5 特性的使用…………………△3程 序 集 …¨… ¨ … …… … … … I31.41 私有程序集…………………△41,4.2 共享程序集…………………△41.4.3 反射 ……………∵……………141.4.4 并行编程……………………△5。NET FramewOrk类 ¨… ¨¨… …J15名称 空 间 ¨ ¨ ¨ ¨ … … … … … 16用 C# 创 建 .NET应用 程序 … … ·161.7.1 创建 AsPJ吡T应用程序……161.7.2 创建 Windows窗体…………181.7.3 使用 WPF… …………¨……181.74 Windows控 件………………△91.7.5 Windows服务………………△91.7.6 WCF¨ ¨¨¨¨¨¨……………………¨¨¨¨·191.7.7 W血dows WF· …¨¨¨¨¨…·……·………19 C# 在.NET企业 体系 结构中的作用………………………19小结 ………¨¨………………21核Jb C# · ∵第一个 C# 程序…¨¨¨……2.1.1 代码 ………………………2.12 编译并运行程序 …………2.1.3 详细介绍 ………………¨变量 … … …… ¨ … … … … … 2,2.1 变量的初始化 ……………2.2.2 类型推断…………………2.2.3 变量的作用域 ……………2⒓ .4 常量………………………预 定义 数 据类 型 … … …… … 2.3.1 类型和引用类型 ………2.3,2 CTs类 z型 ·:· ………………¨…2.3.3 预定义的 类型…………2.⒊ 4 预定义的引用类型 ………流控 制 … … ∴ … ¨ … … … … 2.4.1 条件语旬 …………………2.4.2 循环·¨·¨·…·………………………………2.4.3 跳转语旬……………¨…枚举¨………………………名称空间………¨¨………2‘。1 ushg语句 …………………2.6.2 名称空间的别名 …………Main()方 法…¨………¨……⒉7.1 多个 Mah0方法…………2.7.2 给Ma血()方法传递参数…有关编译 C# 文 件 的更多 内容 控制 台 yo……¨¨¨……¨使用注释………¨…………2.10.1 源文件中的内部注释…2.10.2 XbIL文档…………∵…第 2章2,12,52.62,2.3.4.5.6.72.72.82.92.10.8.9第 7版)#预 处理器指令 …¨¨¨……5811.1 +dcfme矛旧hndef¨ ¨…¨………·5911.2 #i£ #elit+e1se习 阳#g“Ⅱf· ……·5911,3 +warning不口#crror¨ ¨¨¨¨¨¨6011,4 桁egion和#endrcgion¨ ¨¨¨¨611.5 #1inc· ¨¨¨¨……………………………………6I11.6 劫r鲳m犷…………………·61#编 程规则 ……………………⒍12.1 关于标识符的规则………·62122 用法约定…………………·6小结 …¨¨……………………铌象和类型¨ ¨¨… … … ¨ …69和结构 …¨¨¨¨¨¨…¨·69…………¨…………………⒛.1 数据成员…………………… 70.2 函数成员……………………·71.3 只读字段……………………·83名类型 …¨¨¨¨………… 泓构 ¨……¨…¨¨¨¨¨… 85.1 结构是 类型………………·86.2 结构和继承…………………·87,3 结构的构造函数……………·87分类 …¨¨………………… 盯态类 ………………………… B9ect类 ……¨………………·⒆.1 systeln.⒇ect0方 法·…………………90.2 Tos“吧o方法·…………¨¨¨…………90展方法 ……¨……………… 呢结 ………¨…………………叨承 … … ¨… ¨ … … … … … ·95承 的类型 …………………… %,1 实现继承和接 口继承 ………·95.2 多重继承………………∵ … 95.3 结构和类 ……………………·9现继承 ¨¨…………………%.1 虚方法………………………·97.2 隐藏方法……………………·98.3 调用函数的基类版本 ………·994.2.4 抽象类和抽象函数 ……∷·△004,2,5 密封类和密封方法 …………1004.2.6 派生类的构造 函数 …………1014.3 修饰 符 … ¨ … … … … … ¨ … …1064.3.1 可见性修饰符 ……………¨1064.3.2 其他修饰符 …………………1064.4接口… … … … ∴·… …¨ … … …1074.4,1 定义和实现接 口……………1084,4,2 派生的接口………………¨1114.5 /l、 绉占¨¨¨¨¨…………………………………………·113第 5章 泛型 ¨ … … … ¨… … …… ¨……1155,1 概述 … ¨ … … … … …… … … …1155,1.1 性胄旨……………∶·…¨¨¨¨¨¨¨¨¨¨¨1165.1.2 类型安全………………¨ 1175.1.3 二进制代码的重用 ……… 1175.1.4 代码的扩展……………… 1175.1.5 命名约定………………… 1185.2 创建泛型类…¨………………1185.3 泛型类的功能¨………¨Ⅱ…¨1225,3.1 默认 …………………¨1235,⒊ 2 约束 ……………………… 1235,3,3 继承 ……………………… 1265,3.4 静态成员………………… 1275.4 泛 型接 口… … ¨ … …… … … …1275.4.1 协变和抗变……………… 1285.4.2 泛型接口的协变………… 1295.4.3 泛型接口的抗变 ………… 1305.5 泛 型 结 构 ¨ … … … … … ¨ … ¨1315,6 泛 型方 法 … … … … …… … … ¨1345,6.1 泛型方法示例…………… 1345,6.2 带约束的泛型方法……… 1355,6,3 带委托的泛型方法 ……… 1365.64 泛型方法规范…………… 1375.7'小 结 … … ∴·… … ¨ … … … … … 138第 6章 数组……¨…¨……………1396.1 简单数组…………¨…………1396.1.1 数组的声明………………¨1396.1.2 数组的初始化 ………………1
// 反射 对象类 //ruleAssembly为dell文件、ruleNmspaceName :命名空间;ruleClsName:类名 Type ruleType = Assembly.Load(ruleAssembly).GetType(ruleNmspaceName + "." + ruleClsName, true, true); // 反射 非本程序集中的类需要先使用Assembly.Load加载 // 反射 本程序集中的类可直接使用GetTypeGetTy
//动态链接库中ClsPublic类有一变量 private static string key="1111"; //下面通过 反射 的技术 修改 和获取 //设置key public static void updatePalmKey(string key = "test") BindingFlags flag = BindingFlags.
最近在看 反射 就把获取各种常用类型变量的方法总结了一遍。 C# 编译时会把类的信息,变量,特性等都注册在一张表上,而基于System.Reflection下的Assembly,Type类等都可以获取这个表的内容。从而达到根据字符串获取一个类的实例,方法,变量,委托,事件等,以上行为即是我理解的 C# 反射 过程。代码如下: 一个随意定义的待测试类和通过 反射 获取各种类型变量的逻辑。 using Sys
1、.NET可执行应用程序结构 程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构。 应用程序结构分为应用程序域—程序集—模块—类型—成员几个层次,公共 语言 运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。 程序集包含模块,而模块包含类型,类型又包含成员, 反射 则提供了封装程序集、模块和类型的对...
//动态链接库中PvsApiIfCtrl.Cls.Cls_Public类有一变量 private static string key="abcd";//下面通过 反射 的技术 修改 和获取 //设置key public static void updatePalmKey(string key = "1234567890123456") Bind...