【发布时间】: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