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
  • 相关阅读:
    方维分享系统模板修改,book_share_list.htm调用用户数据,$_FANWE['user']的数据
    方维分享系统修改会员的积分设置
    方维分享系统二次开发,tip.htm,修改调用的当前用户的信息
    方维分享系统模板修改,删除操作增加提示
    模拟器分辨率
    android自定义menu,PopUpWindow弹出菜单
    Android popupWindow响应back按键并关闭
    Android开发技巧:ViewStub惰性装载
    android动态全屏切换
    Android程序对不同手机屏幕分辨率自适应的总结
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2984197.html
Copyright © 2011-2022 走看看