我希望有人能够对程序集引用的主题以及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实例化为
的程序main方法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)构造函数)。
我最好的猜测是,只要我们离开默认值,或者无参数构造函数并引用bird类中的任何其他构造函数,编译器就会检查所有构造函数,它们的参数和它们的引用。
对此有任何可靠的解释将非常感激!