zoukankan      html  css  js  c++  java
  • 自定义属性与事件委托相结合的实例

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;

    namespace TestAttributeDemo
    {
        class Class2
        {
            public delegate void TestHandle(string text);//委托一个事件TestHandle

            static void test1_onHandle(string text)//事件出发
            {
                System.Console.WriteLine(text);
            }

            [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Event)]
            public class Aurtor : Attribute //自定义属性 继承系统的System.Attribute
            {
                public string Name;
                public string Version;
            }
            public class Test  //Test类
            {
                [Aurtor(Name = "test Event1", Version = "1.0.0.4")]
                public event TestHandle onHandle; //定义委托事件onHandle

                public void TestMothe3(int value)
                {
                    if (onHandle != null)//如果委托事件不为空
                    {
                        onHandle((value+1).ToString());//就加1

                    }

                }

            }

            static void Main(string[] args)
            {
                Test test = new Test();//建立类的事例
                Type type = test.GetType();//得到类里所有类型
                test.onHandle += new TestHandle(test1_onHandle);//委托事件onHandle触发事件
                test.TestMothe3(1);//传了一个参数1


                EventInfo[] ets = type.GetEvents();//得到Test类里面所有的事件
                foreach (EventInfo et in ets)
                {
                    object[] methodAttributes = et.GetCustomAttributes(false);//得到事件里面的所有属性
                    if (methodAttributes != null)
                    {
                        foreach (object obj in methodAttributes)
                        {
                            if (obj is Aurtor)//如果属性为Aurtor
                            {
                              Aurtor aurtor = obj as Aurtor;
                              System.Console.WriteLine(aurtor.Name);//输出自定义属性名Name

                            }
                        }
                    }
                }
                System.Console.ReadLine();

            }

        }


    }

    输出:  
            2
            test Event1

  • 相关阅读:
    NPOI导出Excel时出现错误“Maximum column number is 255”
    如何快速访问MSDN某一个类或方法的帮助文档
    beyond compare 比较Xls文件时只显示有差异的列
    Java并发编程:Callable、Future和FutureTask
    JAVA多线程实现的三种方式
    ReentrantReadWriteLock类和ReentrantLock类的区别
    Java多线程之Lock的使用
    MySQL中select * for update锁表的问题
    锁表 for update
    spring事物配置,声明式事务管理和基于@Transactional注解的使用
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/865473.html
Copyright © 2011-2022 走看看