zoukankan      html  css  js  c++  java
  • 补充下特性

    特性这个东西哥用的实在太少了,或者有些地方用了自己也不知道,好像在反序列化的地方用过,别的地方用到的很少,博客园里面也有文章说特性,拜读了下,觉得懂了点,但是还是觉得不知道啥时候用,选了一个例子,它代表了我的理解吧,我目前觉得它的用途就是这样

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace A0070_CustomAttributes.Sample
    {
        /// <summary>
        /// 这个类为其他类定义 附加属性
        /// </summary>
        [AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct)]
        class Creator : System.Attribute
        {        
            String name;
            String date;
            String version;
    
            /// <summary>
            /// 构造函数.
            /// </summary>
            /// <param name="name"> 用户名 </param>
            /// <param name="date"> 日期 </param>
            /// <param name="version"> 版本 </param>
            public Creator(String name, String date, String version)
            {
                this.name = name;
                this.date = date;
                this.version = version;
            }
    
            /// <summary>
            /// 显示细节信息.
            /// </summary>
            public void ShowInfo()
            {
                Console.WriteLine("name : {0}", name);
                Console.WriteLine("date : {0}", date);
                Console.WriteLine("version : {0}", version);
            }
        }
        /// <summary>
        /// 用于 测试 属性类的
        /// </summary>
        [Creator("Edward", "2010.9.15", "1.0")]
        class Test1
        {
        }
        /// <summary>
        /// 用于 测试 属性类的
        /// </summary>
        [Creator("Kimi", "2010.9.14", "1.2")]
        class Test2
        {
        }
        /// <summary>
        /// 用于 测试 属性类的
        ///
        /// 注意: 这里的 Test3 继承了 Test2
        ///
        /// Test2 与 Test3 均有属性
        /// </summary>
        [Creator("Ivy", "2010.9.13", "1.1")]
        class Test3 : Test2
        {
        }
    }
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using A0070_CustomAttributes.Sample;
    
    namespace A0070_CustomAttributes
    {
        class Program
        {
            public static void PrintAttributeInfo(Type classType)
            {
                Console.WriteLine("{0}这个类的属性如下:", classType);
                object[] attr = classType.GetCustomAttributes(true);
                foreach (object o in attr)
                {
                    Console.WriteLine("Attribute {0}", o);
                    // 假如对象是 Creator 的实例,那么再调用 具体的方法.
                    if (o is Creator)
                    {
                        ((Creator)o).ShowInfo();
                    }
                }
            }
    
            static void Main(string[] args)
            {
                PrintAttributeInfo(typeof(Test1));
                PrintAttributeInfo(typeof(Test2));
                PrintAttributeInfo(typeof(Test3));
    
                Console.ReadLine();
            }
        }
    }
    运行结果如下:
    A0070_CustomAttributes.Sample.Test1这个类的属性如下:
    Attribute A0070_CustomAttributes.Sample.Creator
    name : Edward
    date : 2010.9.15
    version : 1.0
    A0070_CustomAttributes.Sample.Test2这个类的属性如下:
    Attribute A0070_CustomAttributes.Sample.Creator
    name : Kimi
    date : 2010.9.14
    version : 1.2
    A0070_CustomAttributes.Sample.Test3这个类的属性如下:
    Attribute A0070_CustomAttributes.Sample.Creator
    name : Ivy
    date : 2010.9.13
    version : 1.1
  • 相关阅读:
    React-Native到0.44版本后Navigator 不能用的问题
    php基础
    数据库学习内容复习
    数据库常用的函数
    45道题 数据库的
    数据库里any 和 all 的区别
    高级查询
    表中添加列,删除列,修改列名字
    创建,读取,修改,删除表 简单查询 12种
    设计表:多张表存储学生成绩及各种信息
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2984197.html
Copyright © 2011-2022 走看看