博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过反射将变量值转为变量名本身ZZ
阅读量:6612 次
发布时间:2019-06-24

本文共 3246 字,大约阅读时间需要 10 分钟。

 

这是.NET反射的一个有趣小例子:  通过反射将变量值转为变量名本身.

当然要先添加命名空间:using System.Reflection;

示例代码如下:

class Program    {        string name = "strA";        string strA = "strB";        string strB = "Hello World~";        static void Main(string[] args)        {            Program p = new Program();            p.GetTypeValue();            p.GetStrValue(p.name);            p.SetStrValue(p.strA);            Console.ReadKey();        }        //本文原址:http://www.cnblogs.com/Interkey/p/3460566.html        ///         /// 获取所有FieldInfo的值        ///         void GetTypeValue()        {            Console.WriteLine("Method: GetTypeValue");            FieldInfo[] fis = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);            foreach (FieldInfo fi in fis)            {                Console.WriteLine(fi.Name + " 的值为:" + fi.GetValue(this).ToString());            }            Console.WriteLine();        }        ///         /// 获取字符串str对应的变量名的变量值对应的变量值        ///         ///         void GetStrValue(string str)        {            Console.WriteLine("Method: GetStrValue");            Type type = this.GetType();            //获取字符串str对应的变量名的变量值            Console.WriteLine(type.GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this).ToString());            Console.WriteLine(                type.GetField(                    type.GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this).ToString(),                        BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this).ToString()            );            Console.WriteLine();        }        ///         /// 设置字符串str对应的变量名的变量值        ///         ///         void SetStrValue(string str)        {            Console.WriteLine("Method: SetStrValue");            //赋值前输出            Console.WriteLine(this.GetType().GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this));            //进行赋值操作            this.GetType().GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).SetValue(this, "Hello Interkey~");            //赋值后输出            Console.WriteLine(this.GetType().GetField(str, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this));            Console.WriteLine();        }        //本文原址:http://www.cnblogs.com/Interkey/p/3460566.html    }

代码已经相当清晰,所以就不多做解释了~

本文原址:

.NET的反射可参考: 或 了解。

.NET反射虽然执行效率相对较慢,但在软件破解过程中,作用却非常大。这里就留给有心人了~

本文的代码已上传到~

 

 

 

 

很想实现这个功能,就是把类某一个变量名转换为字符串,

直接使用ToString()是把该变量存放的数据转换为字符串的,
那该如何将变量名本身转换为字符串呢?

128 次浏览 2011-01-01 19:48

7 个回答

好像映射和反射是关于这个方面的,你去了解下吧.

2011-01-01 20:21 推荐: 0 次

嗯,反射就是做这个的。LZ可以学下反射!

2011-01-01 20:23 推荐: 0 次

PropertyInfo[] peroperties = typeof(A).GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

  foreach (PropertyInfo property in peroperties)
  {property .Name;
  property .PropertyType;  
}

2011-01-01 20:45 推荐: 0 次

有个偷懒的笨办法,对类进行xml序列化,然后可以从xml文件中得到各个属性名称、值 。。。

2011-01-01 22:34 推荐: 0 次

利用反射,代码如下:

C# code
 

//获取类型 Type userInfoType = typeof(UserInfo); //获取属性 PropertyInfo[] propertys = userInfoType.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); //循环获取属性 foreach (PropertyInfo pi in propertys) { //获取属性名称 string propertyName = pi.Name; }

你可能感兴趣的文章
KVM
查看>>
jQuery返回顶部代码
查看>>
v-charts
查看>>
需要学习的编程语言
查看>>
(十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用
查看>>
1113: [视频]树形动态规划(TreeDP)8:树(tree)(树形dp状态设计总结)
查看>>
再谈H5存储问题--浏览器无痕模式不支持
查看>>
JS原型与面向对象总结
查看>>
构建之法阅读笔记04
查看>>
Fixed元素在滚动时会抖动----开启硬件加速
查看>>
NodeJs安装步骤与淘宝镜像
查看>>
c语言字符数组与字符串的使用详解
查看>>
个人学习总结
查看>>
[POJ] 1135 Domino Effect
查看>>
设计模式之-享元模式
查看>>
灰度世界算法(Gray World Algorithm) 分类: 图像处理 ...
查看>>
yum安装nginx 加载image_filter 加载方式
查看>>
OAF 汇总行的做法
查看>>
CMD命令名详细大全
查看>>
IOS 定位服务与地图的应用开发
查看>>