首页 > 其他 > 详细

自定义Attribute类

时间:2016-01-11 17:43:37      阅读:147      评论:0      收藏:0      [点我收藏+]

    在我们的项目中有时经常会标识一些类的特性,在下面我们将简短的方式来介绍如何构建自定义的Attribute类。

    

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace DLPVideoApp.DLPCtrl
{
    // 摘要:
    //     定义宿主程序的识别码。
    [ComVisible(true)]
    [AttributeUsage(AttributeTargets.Class, Inherited = true)]
    public sealed class MyClassAttribute : Attribute
    {
        private string _identify = "";
        // 摘要:
        //     初始化 System.Reflection.AssemblyTitleAttribute 类的新实例。
        //
        // 参数:
        //   identifyNumber:
        //     识别码。
        public MyClassAttribute(string identifyType)
        {
            _identify = identifyType;
        }



        public string IdentifyType
        {
            get
            {
                return _identify;
            }
        }
    }
}

 在定义完一个继承自Attribute的基类之后,接下来就是如何去应用我们自定义的MyClassAttribute类了,其实也非常简单,我们只需要在要标明类属性的上面添加下面的内容即可:[MyClassAttribute("DLPVideoApp.DLPCtrl.DLPWin")](这里仅仅是举出一个案例)

  接下来就是如何去应用该Attribute了,下面通过反射的方式来获取程序集中所有的类相关信息,然后再来匹配名称为[MyClassAttribute("DLPVideoApp.DLPCtrl.DLPWin")]的类。

Assembly exeAssembly = Assembly.GetExecutingAssembly();
            Type[] types = exeAssembly.GetExportedTypes();
            Type winType = null;
            for (int i = 0; i <= types.Length - 1; i++)
            {
                Type t = types[i];
                if (!(t.IsPublic && t.IsClass == true && t.IsAbstract == false)) continue;


                object[] clsAttrs = t.GetCustomAttributes(typeof(MyClassAttribute), false);
                if (clsAttrs == null || clsAttrs.Length == 0) continue;

                MyClassAttribute myClassAtribute = clsAttrs[0] as MyClassAttribute;
                if (myClassAtribute.IdentifyType == "DLPVideoApp.DLPCtrl.DLPWin")
                {
                    winType = t;
                    break;
                }
            }

  Assembly exeAssembly = Assembly.GetExecutingAssembly(); Type[] types = exeAssembly.GetExportedTypes();通过这种方式能够获取一个程序集中所有的类以及事件,通过遍历Type数组来寻找自定义的Attribute类,这种方式有时还是非常有效的。另外还要记得去反思怎样正确使用类的属性。

自定义Attribute类

原文:http://www.cnblogs.com/seekdream/p/5121787.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!