在另一个项目和命名空间中调用非静态方法

本文关键字:调用 静态方法 命名空间 另一个 项目 | 更新日期: 2023-09-27 17:55:36

我有两个属于不同解决方案的Windows表单应用程序。我正在尝试使用另一个方法从一个调用方法。我从我尝试访问的解决方案 (Sol1) 创建了一个类库,并在我正在运行的项目 (Sol2) 中引用了它,但我在访问该方法时遇到困难。

我发现这个解决方案建议这样做:

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。

在另一个项目和命名空间中调用非静态方法

创建类的对象,并在已引用解决方案时使用其函数。无需创建静态方法。在解决方案 2 中实例化解决方案 1 类。

Sol1.MyClass cls = new Sol1.MyClass();

然后,您可以使用该方法。

cls.somemethod();

Static成员属于类而不是对象,可以直接按类名使用。