我希望有人可以对程序集引用的主题以及 C# 编译器如何确定何时需要对程序集的引用有所了解。
因此,要设置舞台,请看以下示例:
装配 1(包含 Assembly1Cat 和 Assembly1Bird):
public class Assembly1Bird
{
public Assembly1Bird()
{
}
public Assembly1Bird(Assembly1Cat cat)
{
}
public Assembly1Bird(Assembly2Dog dog)
{
}
}
public class Assembly1Cat
{
}
程序集 2(包含 Assembly2Dog):
public class Assembly2Dog
{
}
然后是实际的可执行文件:
class Program
{
static void Main(string[] args)
{
var bird = new Assembly1Bird();
}
}
程序集引用层次结构如下: 可执行文件引用 Assembly1,Assembly1 引用 Assembly2
这个例子构建得很好。但是,如果我将实例化 Assembly1Bird 的程序主方法更改为
class Program
{
static void Main(string[] args)
{
var cat = new Assembly1Cat();
var bird = new Assembly1Bird(cat);
}
}
此示例不会构建,因为我们的可执行文件需要对 Assembly2 的引用...
所以我的问题是:为什么我们可以使用 Assembly1Bird 无参数构造函数成功构建解决方案,但是一旦我们尝试使用 Assembly1Bird(cat) 构造函数(回想一下 cat 位于 Assembly1 中),我们就需要对 Assembly2 的引用(对于Assembly1Bird(dog) 构造函数)。
我在这里最好的猜测是,一旦我们离开默认或无参数构造函数并引用鸟类中的任何其他构造函数,编译器就会检查所有构造函数、它们的参数和它们的引用。
对此的任何可靠解释将不胜感激!