Attribute + Reflection

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;

namespace testbaseclass
{


        [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
        public class ydhdescAttribute : Attribute 
        {
        public ydhdescAttribute(String Description_in) 
            { 
                this.description = Description_in; 
            } 
            protected String description; 
            
            public String Description 
            { 
                get 
                { 
                    return this.description; 
                } 
            } 
        }
    class Program
    {
        [DllImport("User32.dll")]
        public static extern int MessageBox(int hParent, string Message, string Caption, int Type);

        static void Main(string[] args)
        {
            zi bb = new zi();
             
            fu a = null;
            a = new zi();
            Type myType = a.GetType();
            myType.InvokeMember("zi1",BindingFlags.SetProperty, null, a, new object[]{"sdfsdf"});
            string age = (string)myType.InvokeMember("zi1", BindingFlags.GetProperty, null, a, null);


            MemberInfo[] mis=a.GetType().GetMembers();
            foreach (MemberInfo item in mis)
	        {

                Attribute[] attrs = Attribute.GetCustomAttributes(item);

                if (attrs.Length > 0 && (attrs[0] is ydhdescAttribute))
                {
                    if ((attrs[0] as ydhdescAttribute).Description == "one")
                    {
                        myType.InvokeMember("zi1", BindingFlags.SetProperty, null, a, new object[] { "sdfsdf" });
                        Console.WriteLine((string)myType.InvokeMember("zi1", BindingFlags.GetProperty, null, a, null));
                    }
                }
	        }
            
            //foreach (Attribute attr in attrs)
            //{
            //    if (attr is ydhdescAttribute)
            //    {
            //        ydhdescAttribute help = (ydhdescAttribute)attr;
            //        Console.WriteLine(help.Description);
            //    }
            //}


            Console.ReadLine();
        }
    }

    interface fu
    {
        string a();
    }



    class zi:fu 
    {
       
        string fu.a()
        {
            return "";
        }

        [ydhdesc("one")]
        public string zi1 { get; set; }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值