C# 自定义特性

原创 2015年11月20日 15:19:57

  //自定义特性类

 [System.AttributeUsage(System.AttributeTargets.Field |System.AttributeTargets.Enum)]

    publicclass PropertiesDesc : System.Attribute
    {
        public string Desc { get; set; }
        public PropertiesDesc(string desc)
        {
            Desc = desc;
        }

    }

 

  public class PropertiesUtils
    {
        private static Dictionary<Type,Dictionary<string, string>> cache = new Dictionary<Type,Dictionary<string, string>>();


        public static string GetDescByProperties(object p)
        {
            var type = p.GetType();
            if (!cache.ContainsKey(type))
            {
                Cache(type);
            }
            var fieldNameToDesc = cache[type];
            var fieldName = p.ToString();
            returnfieldNameToDesc.ContainsKey(fieldName) ? fieldNameToDesc[fieldName] :string.Format("Can not found such desc for field `{0}` in type`{1}`", fieldName, type.Name);
        }


        private static void Cache(Type type)
        {
            var dict = new Dictionary<string,string>();
            cache.Add(type, dict);
            var fields = type.GetFields();
            foreach (var field in fields)
            {
                var objs =field.GetCustomAttributes(typeof(PropertiesDesc), true);
                if (objs.Length > 0)
                {
                   dict.Add(field.Name, ((PropertiesDesc)objs[0]).Desc);
                }
            }
        }
    }

//枚举对象

 public enumWeekday
    {
        [PropertiesDesc("星期一")]
        Monday = 1,


        [PropertiesDesc("星期二")]
        Tuesday = 2,


        [PropertiesDesc("星期三")]
        Wednesday = 3,


        [PropertiesDesc("星期四")]
        Thursday = 4,


        [PropertiesDesc("星期五")]
        Friday = 5,


        [PropertiesDesc("星期六")]
        Saturday = 6,


        [PropertiesDesc("星期日")]
        Sunday = 6
    }

 

调用:

 var str =PropertiesUtils.GetDescByProperties(Weekday.Friday);

            Console.Write(str);

 

 


c#自定义特性

  • 2012年08月28日 17:03
  • 46KB
  • 下载

c# 自定义特性

  • 2013年01月08日 23:14
  • 74KB
  • 下载

C# 反射通过GetCustomAttributes方法,获得自定义特性

使用反射访问自定义属性的信息和对其进行操作的方法。 一、代码:   namespace ConsoleApplication1 { class Program { s...

C# 自定义特性

  • 2013年07月13日 16:24
  • 26KB
  • 下载

c# 自定义特性demo

  • 2016年06月29日 22:01
  • 33KB
  • 下载

C# 反射通过GetCustomAttributes方法,获得自定义特性

使用反射访问: 自定义属性的信息和对其进行操作的方法。 一、实例1 1、代码:  如:System.Attribute[] attrs=System.Attribut...

C#编写自定义特性(Attribute)详解(转自:http://www.csharpwin.com/csharpspace/9349r9836.shtml)

 摘要:本文介绍C#编写自定义特性(Attribute),自定义属性本质上是直接或间接地从 System.Attribute 派生的传统类。与传统类一样,自定义属性也包含存储和检索数据的方法。要设计自...
  • lslxdx
  • lslxdx
  • 2011年04月02日 14:10
  • 835

C#自定义特性

code1:using System; using System.Collections.Generic; using System.Linq; using System.Text; namespa...

C#高级编程七十八天----自定义特性

自定义特性 在说自定义之前,有必要先介绍一些基本的概念. 元数据:就是C#中封装的一些类,无法修改,类成员的特性被称为元数据中的注释   1.什么是特性? (1)属性和特性的区别 属性:属...

C#自定义特性介绍

本文通过实例介绍了C#自定义特性。如果不能自己定义一个特性并使用它,我想你怎么也不能很好的理解特性。 AD: C#自定义特性范例介绍 如果不能自己定义一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 自定义特性
举报原因:
原因补充:

(最多只允许输入30个字)