通过反射将变量值转为变量名本身

这是.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

        /// <summary>
        /// 获取所有FieldInfo的值
        /// </summary>
        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();
        }

        /// <summary>
        /// 获取字符串str对应的变量名的变量值对应的变量值
        /// </summary>
        /// <param name="str"></param>
        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();
        }

        /// <summary>
        /// 设置字符串str对应的变量名的变量值
        /// </summary>
        /// <param name="str"></param>
        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
    }
复制代码

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

本文原址:http://www.cnblogs.com/Interkey/p/3460566.html

.NET的反射可参考:反射概述 或 了解.NET中反射机制的使用与分析

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

本文的代码已上传到附件~

 

本文参考了以下文章:

C#里面中将字符串转为变量名

通过字符串 反射 成类的实例

字符串转为变量名,通过字符串给变量赋值

因为感觉挺有意思的,所以就分享给大家~

还有,觉得有意思就顶吧~

 

posted on   Cosmic_Spy  阅读(3147)  评论(8编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

Your IP:
点击右上角即可分享
微信分享提示

返回顶部