【问题标题】:Call a Non-Static Method in Another Project and Namespace在另一个项目和命名空间中调用非静态方法
【发布时间】:2016-07-06 18:54:27
【问题描述】:

我有两个属于不同解决方案的 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 为空。根据 cmets,这仅适用于 static 方法,但我尝试调用的方法是 public void

有没有办法修改它以适用于非静态方法?还是应该以另一种方式完成?我在 Visual Studio 2015 中使用 C#,两个项目都是 .NET。

【问题讨论】:

  • 为什么不直接实例化这个方法所属的类呢?
  • 你了解静态方法和实例(非静态)方法的区别吗?您需要了解两者之间的区别,不仅仅是为了回答这个问题,而是为了学习 C#。
  • @EdPlunkett 如果我理解正确(我可能不是,我是 C# 新手),每次运行程序时静态保持不变,实例不会。
  • @AxxieD - 不,不是这样。您正在考虑常量或只读,这是完全不同的东西。
  • @AxxieD - 这是 MSDN 网站上的一篇很好的文章,应该通过大量示例描述不同之处:Static Classes and Static Class Members

标签: c# .net winforms methods private-methods


【解决方案1】:

当你已经引用了解决方案时,创建一个类的对象并使用它的功能。无需创建静态方法。在解决方案 2 中实例化您的解决方案 1class。

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

那么就可以使用方法了。

cls.somemethod();

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

【讨论】:

  • 请详细说明您的答案。对发布评论之类的答案投反对票。
  • 这正是我所需要的。谢谢!
猜你喜欢
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 2017-01-04
相关资源
最近更新 更多