ダメプログラマーのチラシウラ メタプログラミング

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

※下記のサンプルデータを対象にしたものです
※using System.Reflection;

   private フィールドに値を入れる
       /// <summary>
       /// private フィールドに値を突っ込むサンプル
       /// </summary>
       private void SetPrivateValue()
       {
           Generater gene = new Generater();
           Type type = typeof(Generater);
           FieldInfo info = type.GetField("pValue", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance);
           info.SetValue(gene, "できた!!!");
           Console.WriteLine(gene.GetValue());
       }

   戻り値無しのprivate メソッドの実行サンプル
       /// <summary>
       /// 戻り値無しのprivate メソッドの実行サンプル
       /// </summary>
       private void ExecPrivateMethod()
       {
           Generater gene = new Generater();
           Type type = typeof(Generater);
           MethodInfo method = type.GetMethod("GetData", BindingFlags.NonPublic | BindingFlags.Instance, null
                   , new Type[] { typeof(string), typeof(DateTime), typeof(MethodBase) }, null);
           MethodBase methodBase = null;
           method.Invoke(gene, new object[] { "できるかな?", DateTime.Now, methodBase });
       }

   戻り値有りのprivate メソッドの実行サンプル
       /// <summary>
       /// 戻り値有りのprivate メソッドの実行サンプル
       /// </summary>
       private void ExexPrivateMethodReturn()
       {
           Generater gene = new Generater();
           Type type = typeof(Generater);
           MethodInfo method = type.GetMethod("GetData", BindingFlags.NonPublic | BindingFlags.Instance, null
                               , new Type[] { typeof(string), typeof(object) }, null);
           object obj = method.Invoke(gene, new object[] { "戻り値希望!", null });
           if (obj == null) Console.WriteLine("失敗");
           Console.WriteLine(((EventMessage)obj).time.ToString());
       }




サンプルデータクラス
   public class EventMessage
   {
       public string val = "data";
       public string Daata = "data";
       public DateTime time = DateTime.Now;
   }
   public class Generater
   {
       private int Count;
       private string pValue;
       Generater s_Instance;
       public Generater()
       {
           s_Instance = this;
       }
       public string GetValue()
       {
           return pValue;
       }
       public void GetData(string val)
       {
           Console.WriteLine(val);
       }
       public void GetData(string val, DateTime date)
       {
           Console.WriteLine(val);
       }
       private EventMessage GetData(string val, object obj)
       {
           EventMessage e = new EventMessage();
           return e;
       }
       private void GetData(string val, DateTime date, MethodBase method)
       {
           Console.WriteLine(val);
       }
   }
| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
|ログイン|