在另一个项目和命名空间中调用非静态方法
Call a Non-Static Method in Another Project and Namespace
我有两个属于不同解决方案的 Windows 表单应用程序。我正在尝试使用另一个调用一个方法。我从我试图访问的解决方案 (Sol1) 创建了一个 class 库,并在我正在 运行ning (Sol2) 的项目中引用了它,但我很难访问该方法。
我发现这个 solution 建议这样做:
string s = string InvokeStringMethod3
("TheProject", "TheNamespace", "TheClass", "TheMethod");
public static string InvokeStringMethod3(
string assemblyName,
string namespaceName,
string typeName,
string methodName)
{
Type calledType = Type.GetType(namespaceName + "." + typeName + "," + assemblyName);
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
}
当我 运行 它时,我得到一个 NullReferenceException
,其中 calledType
为空。根据评论,这仅适用于 static
方法,但我尝试调用的方法是 public void
.
有没有办法修改它以适用于非静态方法?或者这应该以另一种方式完成吗?我在 Visual Studio 2015 年使用 C#,这两个项目都是 .NET。
创建一个class的对象,当你已经引用了解决方案时使用它的功能。无需创建静态方法。在解决方案 2 中实例化您的解决方案 1class。
Sol1.MyClass cls = new Sol1.MyClass();
那你就可以使用方法了
cls.somemethod();
Static
成员属于 class 不属于对象,可以直接使用 class 名称。
我有两个属于不同解决方案的 Windows 表单应用程序。我正在尝试使用另一个调用一个方法。我从我试图访问的解决方案 (Sol1) 创建了一个 class 库,并在我正在 运行ning (Sol2) 的项目中引用了它,但我很难访问该方法。
我发现这个 solution 建议这样做:
string s = string InvokeStringMethod3
("TheProject", "TheNamespace", "TheClass", "TheMethod");
public static string InvokeStringMethod3(
string assemblyName,
string namespaceName,
string typeName,
string methodName)
{
Type calledType = Type.GetType(namespaceName + "." + typeName + "," + assemblyName);
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
}
当我 运行 它时,我得到一个 NullReferenceException
,其中 calledType
为空。根据评论,这仅适用于 static
方法,但我尝试调用的方法是 public void
.
有没有办法修改它以适用于非静态方法?或者这应该以另一种方式完成吗?我在 Visual Studio 2015 年使用 C#,这两个项目都是 .NET。
创建一个class的对象,当你已经引用了解决方案时使用它的功能。无需创建静态方法。在解决方案 2 中实例化您的解决方案 1class。
Sol1.MyClass cls = new Sol1.MyClass();
那你就可以使用方法了
cls.somemethod();
Static
成员属于 class 不属于对象,可以直接使用 class 名称。