<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      看了老趙快速反射順便提到了一個DynamicUtilites反射工具,我就舉個小例子說明下怎么使用它

      由于傳統的反射性能不是很好,所以許多高手都想盡方法提高反射的性能

      以下DynamicUtilites編是其中一個(和.net4.0中的那個Dynamic反射不同)

       

      首先在項目中添加DynamicUtilites項目

      DynamicUtilites項目下有三個文件 

      Dynamic.cs

      DynamicComparer.cs

      DynamicEmit.cs

       

      如果由于精力有限無法了解該反射輔助類的具體實現原理,請大家原諒 ^^,大致是將原有反射代碼的封裝和優化,有空我會去了解下該輔助類的源碼

       

      以下簡單介紹如何使用該反射類

       

      先建立一個ICallable接口,注意是泛型接口s

       

       

      代碼
      1 using System;
      2  using System.Collections.Generic;
      3  using System.Text;
      4
      5  namespace DynamicTest
      6 {
      7 publicinterface ICallable<T>
      8 {
      9 double Age { set;get; }
      10 string Gender { set;get; }
      11 string Name { set;get;}
      12 T Create(string name, string gender);
      13 string Eat(T t);
      14 //string Dead(T t);
      15  string Sleep(T t,string time);
      16 }
      17 }
      18  

       

      然后編寫一個老虎類實現該接口

       

      代碼
      1 using System;
      2  using System.Collections.Generic;
      3  using System.Text;
      4
      5  namespace DynamicTest
      6 {
      7 publicclass Tiger:ICallable<Tiger>
      8 {
      9 public Tiger() { }
      10 public Tiger(double age, string name, string gender)
      11 {
      12 this.age = age;
      13 this.gender = gender;
      14 this.name = name;
      15
      16 }
      17
      18 private Rabbit rabbit;
      19 public Rabbit Rabbit
      20 {
      21 get { return rabbit; }
      22 set { value = rabbit; }
      23 }
      24
      25 privatedouble age=0;
      26 publicdouble Age
      27 {
      28 get { return age; }
      29 set { value = age; }
      30 }
      31 privatestring gender;
      32 publicstring Gender
      33 {
      34 get { return gender; }
      35 set { value = gender; }
      36 }
      37
      38 privatestring name;
      39 publicstring Name
      40 {
      41 get { return name; }
      42 set { value = name; }
      43 }
      44
      45 public Tiger Create(string name, string gender)
      46 {
      47 thrownew Exception("The method or operation is not implemented.");
      48 }
      49
      50
      51
      52
      53 publicstring Sleep(Tiger t, string time)
      54 {
      55 return"the time is "+time+" ,the tiger witch name is "+ t.Name +" is sleeping!";
      56 }
      57
      58 publicstring Eat(Tiger t)
      59 {
      60 return t.Name+" is eating";
      61 }
      62
      63
      64 }
      65
      66
      67
      68
      69 publicclass Rabbit
      70 {
      71 privatestring name;
      72 publicstring Name
      73 {
      74 get { return name; }
      75 set { value = name; }
      76 }
      77
      78
      79 public Rabbit(string name)
      80 {
      81 this.name = name;
      82 }
      83 }
      84 }
      85  

       

       

       

      真正的客戶端反射類的實現,請大家仔細看注釋,

       

      代碼
      1 using System;
      2  using System.Collections.Generic;
      3  using System.Text;
      4  //using System.Reflection;
      5  using Phydeaux.Utilities;
      6  using System.Reflection;
      7
      8  namespace DynamicTest
      9 {
      10 /*
      11 * 該類是實現客戶端反射,思路是先反射出老虎類對象
      12 * 然后檢查該對象屬性是否符合條件,并且通過反射改變
      13 * 實體屬性值,加以顯示
      14 *
      15 *
      16 */
      17 class Program
      18 {
      19 staticvoid Main(string[] args)
      20 {
      21 ActionMethod<Tiger>(Check, 99, "逆時針の風", "male");
      22 }
      23
      24 ///<summary>
      25 /// 一個委托
      26 ///</summary>
      27 ///<typeparam name="T"></typeparam>
      28 ///<param name="t"></param>
      29 publicdelegatevoid CheckAnimal<T>(T t);
      30
      31
      32 ///<summary>
      33 /// 檢查對象屬性
      34 ///</summary>
      35 ///<param name="tiger"></param>
      36 publicstaticvoid Check(Tiger tiger)
      37 {
      38 if (string.IsNullOrEmpty(tiger.Name))
      39 {
      40 tiger.Name ="逆時針の風";
      41 }
      42 if (string.IsNullOrEmpty(tiger.Gender))
      43 {
      44 tiger.Gender ="male";
      45 }
      46 if (tiger.Age ==0)
      47 {
      48 tiger.Age =99;
      49 }
      50 }
      51
      52 ///<summary>
      53 /// 利用構造器對象反射出T對象t實例
      54 ///</summary>
      55 ///<typeparam name="T">對象</typeparam>
      56 ///<param name="con">構造器對象</param>
      57 ///<param name="age"></param>
      58 ///<param name="name"></param>
      59 ///<param name="gender"></param>
      60 ///<returns></returns>
      61 publicstatic T CreateObject<T>(Constructor<T, double, string, string> con, double age, string name, string gender) where T : ICallable<T>
      62 {
      63 T t = (T)con.Invoke(age, name, gender);
      64 return t;
      65 }
      66
      67 ///<summary>
      68 /// 利用Dnamic發射獲取相關對象和行為
      69 ///</summary>
      70 ///<typeparam name="T">對象</typeparam>
      71 ///<param name="checkAnimal">checkAnimal委托,在Main(string[] args)方法中直接用方法Check填入,注意用方法名即可</param>
      72 ///<param name="age"></param>
      73 ///<param name="name"></param>
      74 ///<param name="gender"></param>
      75 publicstaticvoid ActionMethod<T>(CheckAnimal<T> checkAnimal, double age, string name, string gender) where T : ICallable<T>, new()
      76 {
      77 /*先建立構造器對象,因為tiger類的構造函數參數是(double age, string name, string gender)
      78 * 所以Explicit<double, string, string>也必須一致,構造器對象的目的是使用Invoke方法反射獲取該對象
      79 */
      80 Constructor<T, double, string, string> create = Dynamic<T>.Constructor.Explicit<double, string, string>.CreateDelegate(ParameterList.Auto);
      81 /*
      82 * 這里比較抽象,產生animal_EatAction委托找出tiger類的eat方法
      83 * 需要注意的是Explicit<T>的T參數決定于eat方法的參數個數和類型
      84 *
      85 */
      86 Func<T, string, T> animal_EatAction = Dynamic<T>.Instance.Function<string>.Explicit<T>.CreateDelegate("Eat");
      87
      88 /*
      89 * 同樣利用Dynamic中的自定義委托Proc接受屬性的寫反射
      90 *
      91 */
      92 Proc<T, double> SetAge = Dynamic<T>.Instance.Field<double>.Setter.CreateDelegate("age");
      93 /*
      94 * 同樣利用Dynamic中的委托Func接受屬性的讀反射
      95 *
      96 */
      97 Func<T, double> GetAge = Dynamic<T>.Instance.Field<double>.Getter.CreateDelegate("age");
      98
      99 //先獲取t對象實例
      100 T t = CreateObject<T>(create, age, name, gender);
      101 //獲取該類年齡屬性值
      102 double originAge = GetAge(t);
      103 //更改該類年齡屬性值
      104 SetAge(t,100);
      105
      106 //執行各種屬性檢查
      107 checkAnimal(t);
      108 //執行t對象的eat方法
      109 Console.WriteLine(animal_EatAction(t, t)+" the age of this tiger is "+t.Age+"!");
      110 Console.ReadLine();
      111 }
      112
      113 }
      114 }
      115

       

       

      以上反射的性能肯定比.net自帶的 強一點,該輔助類下載地址暫時找不到,請大家諒解,地址放在公司電腦里了。。過幾天發布地址

       

      謝謝!

      posted @ 2010-06-14 17:58  逆時針の風  閱讀(1585)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 男女性高爱潮免费网站| 激情综合五月丁香亚洲| 亚洲爆乳WWW无码专区| 一区二区三区人妻无码| 国产丝袜视频一区二区三区| 亚洲avav天堂av在线网爱情| 99精品国产精品一区二区| 精品久久精品久久精品久久| 好男人社区影视在线WWW| 久久综合国产精品一区二区| 国产首页一区二区不卡| 久久精品国产99国产精品澳门 | 婷婷六月天在线| 国产亚洲精品第一综合另类| 色一情一乱一伦麻豆| 另类专区一区二区三区| 国产日韩乱码精品一区二区| 在国产线视频A在线视频| 波多野结衣乳喷高潮视频| 国产成人精品一区二区三区免费| 国产高清乱码又大又圆| 成人AV专区精品无码国产| 国产熟睡乱子伦视频在线播放| 99久久精品看国产一区| 99精品国产成人一区二区| 安龙县| 精品午夜福利短视频一区| 国产成人午夜福利在线观看| 南召县| 国产精品免费中文字幕| 色噜噜久久综合伊人一本| 精品一区二区免费不卡| 亚洲成人精品一区二区中| 宽城| 一本大道av人久久综合| 99热久久这里只有精品| 老太脱裤子让老头玩xxxxx| 一区二区三区四区亚洲自拍| 3d无码纯肉动漫在线观看| 久久九九精品99国产精品| 日韩av一区二区精品不卡|