怎样利用反射给未知类里的静态变量赋值;

threadroc 2015-10-18 06:40:53
现在需要这么个方法
private void 设置某类的警惕啊变量的值(string info)
{
info里包含静态变量名所在的类名和该类名的命名空间;
利用反射根据传进来的字符串参数,给该静态变量赋值,可以做到吗?
}

以上全都在同一个项目里.
...全文
293 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threadroc 2015-10-19
  • 打赏
  • 举报
回复
引用 3 楼 lovelj2012 的回复:
可以做到 但是,你这么搞有神马意义呢?! 1、静态变量在整个生命周期中都存在,软件初始化时创建,在软件消亡后才回收。 2、静态变量是属于类的,只分配一次内存空间。 完全可以创建在一个公共类里面嘛
我是遇到这样一个问题,我写一个公共插件,这个插件的其中一个功能就是给某窗体添加事件, 事件的功能就是可以接收文件的拖放. 文件拖放功能要设置一个属性和2个事件,感觉代码有点长,不好背. 然后就打算写这么个功能,一行代码搞定给某窗体加入文件拖放事件; 拖放事件得到的路径很多地方要用,所以设置的静态变量; 打算这样写本来 addEvent(Control control, out 某类.path) { 匿名类 { path=xxxx;(这里报错了,匿名类里不能用out,所以我就打算用反射给那个静态变量赋值了...) } } 因为这个插件可能多个项目引用,所以不能直接引用某项目的静态变量,也就不能在匿名类里给该静态变量直接赋值; 我现在用的方法是在插件里加了个静态变量,直接给其赋值,而不是静态变量在插件外面; 不过2楼的ajianchina大哥既然方法可行,又多了一种解决方案. 已经帮我解决好多问题了,再次感谢.
江南小鱼 2015-10-18
  • 打赏
  • 举报
回复
可以做到 但是,你这么搞有神马意义呢?! 1、静态变量在整个生命周期中都存在,软件初始化时创建,在软件消亡后才回收。 2、静态变量是属于类的,只分配一次内存空间。 完全可以创建在一个公共类里面嘛
ajianchina 2015-10-18
  • 打赏
  • 举报
回复

namespace ConsoleApplication1
{
	class Class1
    {
		public static int intField = 0;//静态字段
		public static int intProperty { get; set; } //静态属性
		
		static void Main(string[] args)
        {
            var obj = Assembly.Load("ConsoleApplication1").CreateInstance("ConsoleApplication1.Class1");//得到该类实例
            FieldInfo finfo = obj.GetType().GetField("intField");//取得intField字段
            finfo.SetValue(obj, Convert.ChangeType(1, finfo.FieldType));//对intField字段重新赋值1
			
			var property = obj.GetType().GetProperty("intProperty");//取得intProperty属性
			property.SetValue(obj, Convert.ChangeType(2, property.PropertyType), null);//对intProperty属性赋值2
		}
	}
	
}
  • 打赏
  • 举报
回复
信息太少,反射获取有个枚举参数的,那个影响反射是否能获取到值的,如果获取到了,还要看你那个是否支持赋值

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧