C#特性と反射


プロパティの概念プロパティは、プログラムのプログラムセットにメタデータを追加できる言語構造であり、プログラム構造情報を保存するための特定のタイプのクラスである.特性を適用するプログラム構造を、メタデータの取得および使用のためにターゲット設計されたプログラムを特性と呼ぶ消費者である.NETは多くの特性を予定しており、カスタム特性を宣言することもできます
メタデータとは?反射とは?1、プログラムはデータを処理するために使用され、テキストと特性はすべてデータであり、私たちのプログラム自体もデータ2であり、プログラムとそのタイプに関するデータはメタデータと呼ばれ、彼らはプログラムのプログラムセット3に保存され、プログラムは実行時に他のプログラムセットまたはその本体のメタデータを見ることができる.実行中のプログラムが自分のメタデータまたは他のプログラムセットのメタデータを表示する動作を反射と呼びます.
TypeクラスTypeはSyatemにある.Reflectionネーミングスペースでは事前定義タイプ(intやlong、stringなど)、BCLのタイプ(Console、IEnumerableなど)Typeクラスは抽象クラスであり、オブジェクトをインスタンス化できない
注意事項:
プログラムで使用される各タイプについて、CLRは、このタイプの情報を含むTypeタイプのオブジェクトプログラムで使用される各タイプが、それぞれ独立したTypeクラスのオブジェクトに関連付けられるように作成します.
作成したオブジェクトのインスタンス数にかかわらず、タイプオブジェクトがすべてのインスタンスに関連付けられるのは1つだけです.
Typeオブジェクトの取得
1、Type t=myInstance.GetType();クラスのインスタンスによるTypeオブジェクトの取得
オブジェクトクラスにGetTypeメソッドがあり、Typeオブジェクトを返します.すべてのTypeクラスはObjectクラスから継承されているので、任意のタイプでGetType()を使用して彼のTypeオブジェクトを取得できます.
2、Type t=typeof(typeof演算子とクラス名で直接Typeオブジェクトを取得)
まとめ:Typeオブジェクトによって対応するクラスのすべての共有メンバーを取得できます.
まずMyCliassクラスを作成します
 class MyClass 
 {

    private int id; 
    public int age; 
    private string name; 

public string Name 
 { 
   get 
   { 
        return name; 
   }
   set
   { 
    name = value;
   }
} 

    public void Text1() 
    {
    }  
    public string Text2()
    {            
        return "  ";
    }
}

主関数でTypeオブジェクトからクラスのメンバーを取得する
static void Main(string[] args)
    {
        //        typetype

        MyClass my = new MyClass();//                  , type         

        Type type = my.GetType();//              type  

        Console.WriteLine(type.Name);//   

        Console.WriteLine(type.Namespace);//     

        Console.WriteLine(type.Assembly);//           
        FieldInfo[] array = type.GetFields();//           

        foreach (FieldInfo temp in array)
        {
            Console.Write(temp.Name + "  ");
        }

        PropertyInfo[] array2 = type.GetProperties();

        foreach (PropertyInfo info in array2)
        {
            Console.Write(info.Name + "  ");//        
        }

        MethodInfo[] array3 = type.GetMethods();

        foreach (MethodInfo info in array3)
        {
            Console.Write(info.Name + "  ");
            //                      
        }
        Console.ReadKey();
    }

AssemblyクラスAssemblyクラスはSystemにあります.Reflectionネーミングスペースで定義され、特定のプログラムセットのメタデータにアクセスできます.プログラムセットのロードと実行も可能です.
プログラムセット1、Assembly 1=Assembly.をロードする方法Load(“SomeAssembly”);セット名に基づいてセットをロードすると、ローカルディレクトリとグローバルセットキャッシュディレクトリで名前に一致するセットが検索されます.
2、Assembly assembly2=Assembly.LoadFrom(@"c:xxxxSomeAssembly.dll")ここのパラメータはプログラムセットの完全なパス名で、他の場所で検索することはありません
ObsoleteプロパティObsoleteプロパティ簡単に言えば、いくつかの古い方法が時代遅れになったとき、プログラム猿に古い方法の代わりに新しい方法を使うようにヒントを与えますが、古い方法は依然として使用できます.
class Program 
{ 
        [Obsolete("       ,   NewMethod()  ")]//             ,         

static void OldMethod()
{ }
static void NewMethod()
        {
           Console.WriteLine("   ");
        }
 static void Main(string[] args)
        {
           OldMethod();
           Console.ReadKey();  
        }

//                 ,             

class Program
      {
          [Obsolete("       ,   NewMethod()  ", true)]//             ,         

          //bool             ,true     ,     

static void OldMethod()
          {
              Console.WriteLine("   ");
          }
static void NewMethod()
          {
             Console.WriteLine("   ");
          }
 static void Main(string[] args)
          {
             OldMethod();
             Console.ReadKey();
           }
       }