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

问题描述 投票:-2回答:1

我有两个属于不同解决方案的Windows窗体应用程序。我试图用一个方法调用另一个方法。我从我正在尝试访问的解决方案(Sol1)创建了一个类库,并在我正在运行的项目(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。

c# .net winforms methods private-methods
1个回答
2
投票

在引用解决方案后,创建类的对象并使用其功能。无需创建静态方法。内部解决方案2实例化您的解决方案1class。

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

然后你可以使用这个方法。

cls.somemethod();

Static成员属于不属于对象的类,可以通过类名直接使用。

© www.soinside.com 2019 - 2024. All rights reserved.