zoukankan      html  css  js  c++  java
  • 浅淡反射问题

    浅淡反射问题
    [Key word:convert string to variable,C#,Reflection]
      在学习反射的时候,总有人跟我说,没有必要去学习一些又难又没用的东西。然而今天我先不说反射可以为我们解决什么问题(其实我也不清楚),从一个实际的问题出发来简单的讨论一下反射问题。

    有这样的一个实际问题,两个变量:
    string m_str1 = "m_str2";
    string m_str2 = "This is a test!";
    现在的问题:如何利用m_str1得到"This is a tset!"(不能用m_str2),也就是说,如何让m_str1里的值成为一个新的变量。

    在此之前,我找了到了几个有解决方案的网站,得其中一个的启示,用到了反射。这里是网址:
    http://www.experts-exchange.com/M_3562622.html
    http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.languages.csharp/2005-04/msg03271.html

    解决示例(Code):

    using System;
    using System.Reflection;
    using System.Security;

    public class Sample
    {
        
    static public string m_str1    = "This is a test!";
        
    static public string m_str2    = "m_str1";


        
    unsafe public static void Main()
        
    {
            FieldInfo m_field    
    = Type.GetType("Sample").GetField(m_str2);
            Console.WriteLine(m_field.GetValue(m_str2));
    }

    }

    实际应用:
      在实际的项目中,我遇到这样的一个问题,我在一个类里添加很多静态的字符串做为资源,有一些很长,但很一个都按结构分好了类,在类名为:WaveTextManager里,其中有一些提示用户操作错误的字符串。那么当用户操作错误的时候,把用户导入到错误页面上,然后根据参数来选择提示信息。部份代码:

            private void Page_Load(object sender, System.EventArgs e)
            
    {
                
    // Put user code to initialize the page here
                string m_msgType            = Request["ErrorType"];
                WaveTextManager.ErrorMsg m_errorType    
    = new WaveTextManager.ErrorMsg();
                
    if(m_msgType==null)return;
                FieldInfo m_errorField        
    = m_errorType.GetType().GetField(m_msgType);
                
    if(m_errorField==null)return;
                
    string m_errorMsg            = m_errorField.GetValue("Webb.WAVE.Controls.ErrorMsg").ToString();
                
    if(m_errorMsg==null)return;
                Response.Write(m_errorMsg);
            }

    好了,这里只是简单的利用一个实际问题来讨论一下反射问题,在理论上,可以用反射来完成一个类似ILDasm的工具出来。

    ================================
      /\_/\                        
     (=^o^=)  Wu.Country@侠缘      
     (~)@(~)  一辈子,用心做一件事!
    --------------------------------
      学而不思则罔,思而不学则怠!  
    ================================
  • 相关阅读:
    Wiki上的C++哲学
    UC网盘被关停 将与阿里淘盘合并?(案例说明云盘的成本才是重点,技术不是问题;与巨头竞争是重点)
    又一个!迅雷快盘宣布关闭个人存储服务
    QT运行cmd指令(两种办法:QProcess.start然后waitForFinished,运行cmd /c命令)
    EventBus实现
    彻底抛弃PeopleEditor,SharePoint中利用Jquery Chosen创建新的人员选择器
    软件用了那些技术2
    软件的模块化开发
    在C#中模拟Javascript的setTimeout方法
    IP:网际协议
  • 原文地址:https://www.cnblogs.com/WuCountry/p/306276.html
Copyright © 2011-2022 走看看