反射 - 在指定的类名称上动态调用方法

时间:2013-03-13 08:04:38

标签: c# .net reflection coded-ui-tests

我需要使用Dot Net的Reflection概念,我对它没有多少专业知识。我会上课和方法名称为字符串,需要在类上调用该方法。

以下是我需要调用方法的类:

namespace ObjectRepositories
{
    class Page_MercuryHome : CUITe_BrowserWindow
    {
        public new string sWindowTitle = "";
        public Page_MercuryHome()
        {
            #region Search Criteria
            this.SearchProperties[UITestControl.PropertyNames.Name] = "Blank Page";
            this.SearchProperties[UITestControl.PropertyNames.ClassName] = "IEFrame";
            this.WindowTitles.Add("Blank Page");
            this.WindowTitles.Add("Welcome: Mercury Tours");
            #endregion
        }

        public CUITe_HtmlEdit UIEdit_UserName = new CUITe_HtmlEdit("Name=userName");
        public CUITe_HtmlEdit UIEdit_Password = new CUITe_HtmlEdit("Name=password");
        public CUITe_HtmlInputButton UIInputButton_Login = new CUITe_HtmlInputButton("Name=login");
}
}

现在在下面的方法中,我将收到要调用的父类名,子类名和方法。

如下:

void PerformOperation(string ParentClass, string SubClass, string MethodName)
{
/* Suppose if I receive arguments as "Page_MercuryHome","CUITe_BrowserWindow","SetText")
then it should call SetText() method of subclass CUITe_BrowserWindow which is having Page_MercuryHome as Parent Class"
}

我尝试了很多这样做但却无法做到。

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:2)

我假设您知道该类将始终与PerformOperation在同一个程序集中。 如果不是,则需要组件的名称。

您不需要ParentClass,但您确实需要SubClass的全名(包括命名空间)。

我假设你的类总是有一个默认的构造函数,你的方法永远不会有任何参数。

如果以上情况属实,以下情况应该有效:

void PerformOperation(string fullClassName, string methodName)
{
   ObjectHandle handle = Activator.CreateInstance(null, fullClassName);
   Object p = handle.Unwrap();
   Type t = p.GetType();

   MethodInfo method = t.GetMethod(methodName);
   method.Invoke(p, null);
}

object ReadField(string fullClassName, string fieldName)
{
   ObjectHandle handle = Activator.CreateInstance(null, fullClassName);
   Object p = handle.Unwrap();
   Type t = p.GetType();

   FieldInfo field = t.GetField(fieldName);
   return field.GetValue(p);
}

编辑:添加方法来实例化给定类的对象并返回给定字段的值