新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → [原创]DotNet中如何将属性作为参数引用传递 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6560 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [原创]DotNet中如何将属性作为参数引用传递 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     supnate 帅哥哟,离线,有人找我吗?天秤座1981-10-22
      
      
      威望:6
      等级:计算机学士学位(版主)
      文章:101
      积分:2417
      门派:Lilybbs.net
      注册:2005/3/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给supnate发送一个短消息 把supnate加入好友 查看supnate的个人资料 搜索supnate在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看supnate的博客楼主
    发贴心情 [原创]DotNet中如何将属性作为参数引用传递

    花了不少时间研究这个问题,网上也没搜到合适的答案,现在终于发现了解决办法,写出来和大家共享,嘿嘿

    问题来由:在一个程序中需要集中处理一些控件的属性,如TextBox的Text属性,Label的Text属性,Button的Value属性等等,于是我用一个函数来处理,如PropertyHandler(string property)
    但是这样的代码:
    public void PropertyHandler(string property)
    {
    property="Setted";
    }
    public static main()
    {
    TextBox tb=new TextBox();
    tb.Text="a";
    PropertyHandler(tb.Text);
    Consle.WriteLine(tb.Text);
    }

    会发现打印出来的仍然是"a"
    原因很简单,.net中所有的字符串都是恒定不变的,尽管string是一个object,但由于字符串驻留技术,表现出来的仍然是值传递形式,对于string属性,传递过去的是get出来的值,而不是属性引用本身。此时如果是一个string字段(注意不是属性),可以通过ref out关键字来实现引用传递,可是对于属性却是不行的,SDK中特别提起ref out对属性无效,毕竟属性实际上是属于方法的行列。

    解决办法:为了实现属性的引用传递不得不借助于其它的手段,可能代码看上去没那么好看,但能用就行,呵呵,现贴出来大家评评吧

    public void PropertyHandler(object _obj,string _propertyName)
    {
    System.Reflection.PropertyInfo pi=_obj.GetType().GetProperty(_propertyName);
    pi.SetValue(_obj,"value",null);
    pi.GetValue(_obj,null);
    }

    这样等于是把对象和属性名作为参数传过去,然后通过反射得到实际的属性引用,通过调用GetValue和SetValue方法实现了属性的get和set操作,代码可能容错性不是很好,毕竟有的属性是只读或只写的,那么SetValue和GetValue可能就无法执行,但主要是提供一个思想,希望大家遇到这类需求的时候能知道有这样一个方法,呵呵


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/4/21 22:45:00
     
     GoogleAdSense天秤座1981-10-22
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/27 22:50:24

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms