如何在c#中从应用程序外部访问命名空间的函数
本文关键字:访问 外部 命名空间 函数 应用程序 | 更新日期: 2023-09-27 18:13:29
我有一个如下所示的名称空间。
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);
}
当我将函数声明为public时,得到错误
"非静态字段、方法或财产"
但是当我将它声明为公共静态时,我可以访问函数,也可以访问所有其他函数,变量需要声明为静态。我不希望该类的所有函数都是静态的,但只有函数testfunc。我该怎么做?
要调用静态函数,应该首先指定类名。否则编译器将不知道调用哪个方法。在您的示例中替换:
string s=testfunc(test);
string s = testclass.testfunc(test);
你也应该提供有效的参数,匹配方法的签名,当调用method.Invoke(...)
时,否则你会得到一个运行时异常。
虽然我不知道为什么要创建这样的设计(并且您也没有在测试类背后解释您的想法),但对我来说,这看起来像是"糟糕的"设计。