asp.Netカスタムプロパティ

8135 ワード

今日张子阳の.netでの反射(反射特性)文を见て、反射はカスタマイズの特性に合わせて确かにまだ役に立つと思って、前に本を読んで、ブログを见てから多くの心血が沸いているコードを机の上に置いて、时間が长くて、自分でもそれらが何をしているのか分からないで、それから削除して、たくさん书いたことがありますが、见たのも十分ですが、何も残っていません.そこで、ここに練習コードを記録することにしました.
定義されたプロパティクラスのコードを貼り付けます.
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;



namespace AttributeTest

{

    [Serializable]

    [ComVisible(true)]

    /*AttributeUsage    :          ,      ,       ,       ?

     *           (AttributeTargets)   (   ?)。

     * ArributeTargets    ,          ,   RecordAttributes (      Attribute),      Class Method 。

     * AllowMultiple   ?           ,   ?      : 

       [Record("   ", "       XXX", "2013-7-18 14:24:32")] 

       [Record("       ", "       XXX", "2013-8-18 18:24:32")] 

                    ,     AllowMultiple=true,      (  )          。

     */ 

    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = true)]

    //       Attribute (   ?),.net       Attribute   

    public class RecordAttribute : Attribute

    {

        //   

        public string Name { get; set; }

        //  

        public string Memo { get; set; }

        //  

        public DateTime Date { get; set; }

        //    ,RecordAttribute          ,      Attribute,           ,               。

        public RecordAttribute(string name, string memo, string date)

        {

            this.Name = name;

            this.Memo = memo;

            this.Date =Convert.ToDateTime(date);

        }

    }

}

次に、このプロパティを使用する方法を示します.
 #region      

            //          (Attribute) 

            AttributeTest att = new AttributeTest();

            //type         

            Type t = att.GetType();

            //      AttributeTest    ,   

            object[] os = t.GetCustomAttributes(typeof(RecordAttribute), false);

            Console.WriteLine("AttributeTest     :");

            foreach (RecordAttribute item in os)

            {

                Console.WriteLine("" + item.Name + "," + "" + item.Memo + "," + "" + item.Date);

            }

            Console.WriteLine("AttributeTest       ");

            Console.WriteLine("AttributeTest aa       :");

            MethodInfo method = t.GetMethod("aa");

            object[] mAtt = method.GetCustomAttributes(typeof(RecordAttribute), false);

            foreach (RecordAttribute item in mAtt)

            {

                Console.WriteLine("" + item.Name + "," + "" + item.Memo + "," + "" + item.Date);

            }

            Console.WriteLine("AttributeTest aa       ");

            #endregion

新しいコンソールプログラムを作成し、プログラムでAttributeTestを参照し、mainでコードをコピーすれば直接実行できます.
クラスやメソッドの特性を反射で取得する方法では,コードの変更履歴をより容易に取得することができ,注釈を用いる方法よりも確かにずっとよい.