2011-12-27 116 views
0

在我的業務邏輯中,我創建了數據庫操作的類,如插入,更新等。 爲此目的,我創建了一個類CDatabase,其中設置了一些方法,如openconnection和closeconnection transation等。使用反射獲取類變量值

現在我的邏輯類繼承該類

CAnswerLogic:的CDatabase {

OpenConnection(); 
    BeginTrans(); 
    Command.CommandText = "PKG_ANSWER.PROC_ADD_ANSWERS"; 

}

可以使用反射來獲取Command.CommandText的值嗎? Command是CDatabse類中的一個屬性。

我寫返回一個類

 

private IEnumerable GetAllMethod(string pstrClassName) 
     { 
      const BindingFlags flags = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static; 

      var llistMethod = new List(); 
      var assembly = Assembly.LoadFile(Server.MapPath(@"bin/InfoDomeBLL.dll")); 
      try 
      { 
       foreach (Type type in assembly.GetTypes()) 
       { 

        if (type.IsClass && type.Name == pstrClassName) 
        { 
         var method = type.GetMethods(flags); 
         foreach (var methodInfo in method) 
         { 
          llistMethod.Add(methodInfo.Name); 

          //var mb = methodInfo.GetMethodBody(); 
          //foreach (LocalVariableInfo lvi in mb.LocalVariables) 
          //{ 
          // Response.Write("Local variable: " + lvi); 
          //} 
         } 
         var basetype= type.BaseType; 
        } 
       } 
      } 
      catch (Exception) 
      { 

      } 
      return llistMethod; 
     } 

的所有方法在Web項目中,我已經添加了BLL項目的參考方法。 請幫助我。

+0

可能的重複:http://stackoverflow.com/questions/1674947/get-property-value-dynamically – 2011-12-27 12:25:08

回答

1

如果您使用type.GetProperties(flags);而不是type.GetMethods(flags);您會發現您正在尋找的財產。然後,執行propertyInfo.GetValue(Command, null);以獲取該值。

+0

我將能夠找到父類的屬性的值。因爲Command是基類CDatabase的屬性。 – 2011-12-27 12:40:31

+0

當然可以。如果你不*指定'BindingFlags.DeclaredOnly',它會爲你提供層次結構中所有類的所有屬性。只需在MSDN上查找這些方法即可。 – 2011-12-27 12:43:41

+0

我無法解決我的問題。在我的班級中,我有不同的方法。我想知道Command.CommandText屬性的值,該屬性位於特定的方法中,並且命令在我的父類中聲明。希望我能告訴你我的問題。 – 2011-12-28 05:32:18