2011-12-27 86 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