首页 > 开发 > 综合 > 正文

(论坛答疑点滴)如何动态设定类的属性和字段?

2024-07-21 02:15:53
字体:
来源:转载
供稿:网友

正好有人问这个,代码非常简单,最基本的应用,直接贴代码

using system;

namespace test
{
    /**//// <summary>
    /// class1 的摘要说明。
    /// </summary>
    class class1
    {
        /**//// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [stathread]
        static void main(string[] args)
        {
            //
            // todo: 在此处添加代码以启动应用程序
            //
            myfieldclass dv=new myfieldclass();
            system.collections.hashtable ht1=new system.collections.hashtable();
            ht1.add("fielda","a");
            ht1.add("fieldc","c");
            setfield1(ht1,dv);//如果类中的字段匹配hashtable中的key则重新设定
            //setfield2(ht1,dv)//如果hashtable中的key匹配类中的字段则重新设定,效果等同于setfield1
            console.writeline(dv.fielda);//a
            console.writeline(dv.fieldb);//bb
            console.writeline(dv.fieldc);//c
            system.collections.hashtable ht2=new system.collections.hashtable();
            ht2.add("propertyb","b");
            ht2.add("propertyc","c");
            setproperty1(ht2,dv);//如果类中的属性匹配hashtable中的key则重新设定
            //setproperty2(ht2,dv);//如果hashtable中的key匹配类中的属性则重新设定,效果等同于setproperty1
            console.writeline(dv.fielda);//a
            console.writeline(dv.fieldb);//b
            console.writeline(dv.fieldc);//c
            
        }

        public static void setproperty1(system.collections.hashtable ht1,myfieldclass dv)
        {
            foreach(system.collections.dictionaryentry de in ht1)
            {
                system.reflection.propertyinfo pi=dv.gettype().getproperty(de.key.tostring());
                if(pi!=null)pi.setvalue(dv,de.value.tostring(),null);
            }
        }

        public static void setproperty2(system.collections.hashtable ht1,myfieldclass dv)
        {
            foreach(system.reflection.propertyinfo pi in dv.gettype().getproperties())
            {
                if(ht1.contains(pi.name))pi.setvalue(dv,ht1[pi.name],null);
            }
        }

        public static void setfield1(system.collections.hashtable ht2,myfieldclass dv)
        {
            foreach(system.collections.dictionaryentry de in ht2)
            {
                system.reflection.fieldinfo fi=dv.gettype().getfield(de.key.tostring());
                if(fi!=null)fi.setvalue(dv,de.value.tostring());
            }
        }

        public static void setfield2(system.collections.hashtable ht2,myfieldclass dv)
        {
            foreach(system.reflection.fieldinfo fi in dv.gettype().getfields())
            {
                if(ht2.contains(fi.name))fi.setvalue(dv,ht2[fi.name]);
            }
        }
    }

    public class myfieldclass
    {
        public string fielda="aa";
        public string fieldb="bb";
        public string fieldc="cc";

        public string propertya
        {
            get
            {
                return fielda;
            }
            set
            {
                fielda=value;
            }
        }

        public string propertyb
        {
            get
            {
                return fieldb;
            }
            set
            {
                fieldb=value;
            }
        }

        public string propertyc
        {
            get
            {
                return fieldc;
            }
            set
            {
                fieldc=value;
            }
        }
    }

}


  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表