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

  • 相关阅读:
    CF698C LRU
    关于 Exists 的几种嵌套查询
    React中使用useState()导致的问题记录
    react报错:Legacy context API has been detected within a strict-mode tree.
    vue-cli3.0 + typescript 构建项目
    VUE3.0 + TS 项目实战 (2)基本写法
    vue图片剪辑
    实现直播间消息评论滚动,顶部消失效果
    js 实现数组元素交换位置
    JS树结构操作:查找、遍历、筛选、树结构和列表结构相互转换,删除对应数据
  • 原文地址:https://www.cnblogs.com/xiaobaigang/p/865473.html
Copyright © 2011-2022 走看看