C#反射技術の簡単な操作(クラスのプロパティの読み取りと設定)

3992 ワード

public class A
        {
            public int Property1 { get; set; }
        }
static void Main(){
            A aa = new A();
            Type type = aa.GetType();// 
            System.Reflection.PropertyInfo propertyInfo = type.GetProperty("Property1");
            propertyInfo.SetValue(aa, 5, null);// 
            int value = (int)propertyInfo.GetValue(aa, null);
            Console.WriteLine(value );
}

 
 
少量のプロパティの自動化操作を手動で何回か追加するのはもちろん問題ありませんが、プロパティの数が多い場合はこれらの煩雑なロックのコードを叩くと眠くなり、拡張性やメンテナンス性に多くの不便をもたらすため、反射を使用して実現する必要があります.
1つのタイプのインスタンスのプロパティまたはフィールドに動的に値を割り当てたり、値を取ったりするには、まずこのインスタンスまたはタイプのTypeを得る必要があります.マイクロソフトはすでに十分な方法を提供しています.
まずテストのクラスを作成します
 
  • public class MyClass 

  • public int one { set; get; } 

  • public int two { set; get; } 
  • public int five { set; get; } 

  • public int three { set; get; } 
  • public int four { set; get; } 


  •  
    次にクラスを反射するコードを記述します
     
  • MyClass obj = new MyClass(); 

  • Type t = typeof(MyClass); 
  • //循環賦値
  • int i = 0; 
  • foreach (var item in t.GetProperties()) 

  • item.SetValue(obj, i, null); 

  • i += 1; 

  • //単独賦課
  • t.GetProperty("five").SetValue(obj, 11111111, null); 

  • //循環取得
  • StringBuilder sb = new StringBuilder(); 

  • foreach (var item in t.GetProperties()) 

  • sb.Append(「タイプ:」+item.PropertyType.FullName+「属性名:」+item.Name+「値:」+item.GetValue(obj,null)+「
    」); 

  • //単独取値
  • int five = Convert.ToInt32(t.GetProperty("five").GetValue(obj, null)); 

  • sb.Append(「fiveの値を単独で取る:」+five); 
  • string result = sb.ToString(); 

  • Response.Write(result); 
     
    テスト結果:タイプ:System.Int 32属性名:one値:0タイプ:System.Int 32属性名:two値:1タイプ:System.Int 32属性名:five値:11111111型:System.Int 32属性名:three値:3タイプ:System.Int 32属性名:four値:4単独fiveの値:11111111
    クラスのプロパティ反射の使用を理解すると、t.GetProperties()をt.GetMethods()に変更し、操作方法は同じです. 
    注意:上記のコードで直接使用できない場合はusing Systemを追加してください.Text;を行ないます.
     
    おすすめ読書:
  • C#rarファイル圧縮を実現
  • C#操作XMLメソッド要約
  • C#テキストファイルのマージを実現
  • C#における各種データセットの遍歴方法
  • C#4.0新特性の---オプションパラメータ、ネーミングパラメータ、パラメータ配列