欢迎光临
我们一直在努力

(论坛答疑点滴)如何动态设定类的属性和字段?-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

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

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;
            }
        }
    }

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » (论坛答疑点滴)如何动态设定类的属性和字段?-.NET教程,Asp.Net开发
分享到: 更多 (0)