【发布时间】:2019-06-22 09:45:48
【问题描述】:
我在使用静态类方法重载时遇到问题(不确定它是否会在非静态类上重现)
我有 3 个项目。在 ref chan 中,如 project-1 引用 project-2,project-3 引用 project-2。这意味着 project-3 没有直接的 project-1 引用。
在 project-2 上,我有一个静态类,其中包含具有两个重载的方法:一个具有字符串参数,一个具有来自 project-1 的类型。当我尝试使用带有字符串参数的重载从 project-3 调用方法时,编译器会引发一个错误,我必须在项目 3 中引用 project-1。如果我创建一个新方法并执行与带有字符串参数的重载方法相同的操作 -everythig工作正常。我会尽量用代码解释。
项目-1
public class Foo
{
public string Text { get; set; }
public string Bar()
{
return Text + " bar";
}
}
Project-2(参考 Project-1)
public static class StaticClass
{
public static string RunAnother(string str)
{
var foo = new Foo { Text = str };
return Run(foo);
}
public static string Run (string str)
{
var foo = new Foo { Text = str };
return Run(foo);
}
public static string Run(Foo foo)
{
return foo.Bar();
}
}
Project-3(仅参考 project-2)
var t1 = StaticClass.Run("test"); //Compile error: " The type 'Foo' is defined in an assembly that is not referenced."
var t2 = StaticClass.RunAnother("test"); //Works great
为什么会这样?
【问题讨论】:
-
您重建了完整的解决方案吗?
-
@FrodeNilsen 是的。它不是运行时错误。这是编译器错误。
-
尚未构建的东西如何工作? Project-3 示例中的第一行没有使用 Foo 类型。
-
好的。我会纠正自己:如果我使用 var t1 = StaticClass.Run("test"); - 我有编译器错误。如果我使用 var t2 = StaticClass.RunAnother("test"); - 构建通过,它工作正常。