zoukankan      html  css  js  c++  java
  • Attribute

    一、  简介:

     class Person   
        {
            [ReadOnly(true)] //只读
            [DisplayName("姓名")] //显示成中文
            [Browsable(false)] //不显示
            public int Age { get; set; }
            public string Name { get; set; }
    
            [Obsolete]  //标记成员已过时
            public void SayHi()
            {
                Console.WriteLine("大家好:我是{0},年龄{1}", Name, Age);
            }
        }

    二、判断是否使用attribute及自定义:

       class Person   
        {
            [ReadOnly(true)] //只读
            [DisplayName("姓名")] //显示成中文
            [Browsable(false)] //不显示
            public int Age { get; set; }
            public string Name { get; set; }
    
            [Obsolete]
            public void SayHi()
            {
                Console.WriteLine("大家好:我是{0},年龄{1}", Name, Age);
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Person p1 = new Person();
                p1.Name = "chen";
                p1.Age = 22;
                Type type = p1.GetType();
    
                //查看标签是否有用
                object[] obsoltesAttrs = type.GetCustomAttributes(typeof(ObsoleteAttribute), false);
                if(obsoltesAttrs.Length>0)
                {
                    Console.WriteLine("这个类已经过时");
                }
                else
                {
                    Console.WriteLine("这个类没有过时");
                }
    
                //遍历属性
                foreach (PropertyInfo prop in type.GetProperties())
                {
                    string displayName;
                    //方式一
                    DisplayNameAttribute display=(DisplayNameAttribute)prop.GetCustomAttribute(typeof(DisplayNameAttribute));
                    if(display==null)
                    {
                        displayName = null;
                    }
                    else
                    {
                        displayName = display.DisplayName;
                    }
    
                    //方式二
                    /*
                    object[] diaplayAttrs = prop.GetCustomAttributes(typeof(DisplayNameAttribute), false);
                    if(diaplayAttrs.Length<=0)
                    {
                        displayName = null;
                    }
                    else
                    {
                        DisplayNameAttribute displayAttr = (DisplayNameAttribute)diaplayAttrs[0];
                        displayName = displayAttr.DisplayName;
                    }
                    */
                    string name = prop.Name;
                    object value = prop.GetValue(p1);
                    Console.WriteLine(name +"("+ displayName + ")"+ "=" + value);
                   // DisplayNameAttribute displayAttr = (DisplayNameAttribute)prop
                }
                Console.ReadKey();
            } 
            
        }
    //自定义attribute
        public class JanpanDisplayAttribute : Attribute
        {
    
            public string DisplayName { get; set; }
            public JanpanDisplayAttribute(string name)
            {
                this.DisplayName = name;
            }
        }
       
  • 相关阅读:
    【CLR via C#】CSC将源代码编译成托管模块
    [转载]敏捷开发之Scrum扫盲篇
    UML图中经常用到几种的关系图例
    敏捷的12项原则,我们团队管理的方针
    JavaScript 记录页面停留时间-通过测试
    [转]Web App 框架选择之百度&腾讯
    c#,asp.net 开发 app 学习资料整理
    未能为数据库 '*'中得对象'*'分配空间,因文件组'PRIMARY'已满
    微支付开发过程中的注意点
    微支付的asp.net文档例子
  • 原文地址:https://www.cnblogs.com/fuyouchen/p/9361404.html
Copyright © 2011-2022 走看看