-3

我有一个命名空间,如下所示。

 namespace testnamespace
    {
        public class testclass : System.Web.UI.Page
        {
            public static string testData;


            public void test()
            {
                string s = "fgdfgdg";

            }
            protected string Invoke(string methodname)
            {
                //string methodName = "test";
                string classname = methodname.Split('-')[0];
                 string funcname=methodname.Split('-')[1];
                 Type type = Type.GetType(classname); 
                Activator.CreateInstance(type);
                 MethodInfo method = type.GetMethod(funcname);

             string result = (string)method.Invoke(Activator.CreateInstance(type), null);
             return result;
            }
            public static string testfunc(string temp)
            {
                hdnData = temp;           
               string strval=  Invoke(s);
               return strval;

            }
        }
    }

我在另一个应用程序中引用了这个 dll,如下所示。

using testnamespace;
 protected void Button1_Click(object sender, EventArgs e)
        {
           string test='testfunction';
            string s=testfunc(test);
        }

当我将函数声明为公共时,我得到了错误

“非静态字段、方法或属性需要对象引用”

但是当我将它声明为公共静态时,我可以访问该函数以及所有其他函数,变量需要声明为静态。我不希望该类的所有函数都是静态的,而只是函数 testfunc。我怎样才能做到这一点?

4

1 回答 1

2

要调用静态函数,您应该首先指定类名。否则编译器将不知道调用哪个方法。在您的示例中替换:

string s=testfunc(test);

string s = testclass.testfunc(test);

调用时还应提供有效参数,匹配方法的签名,method.Invoke(...)否则会出现运行时异常。

虽然我不知道为什么要创建这样的设计(而且您也没有在测试课程背后解释您的想法),但这对我来说看起来像是“糟糕”的设计。

于 2013-05-14T06:02:40.023 回答