C# 程序集引用层次结构和构造函数

C# 程序集引用层次结构和构造函数,c#,reference,hierarchy,.net-assembly,C#,Reference,Hierarchy,.net Assembly,我希望有人能对程序集引用的主题以及C编译器如何确定何时需要对程序集的引用有点了解 因此,要设置舞台,请以以下示例为例: 组件1包含Assembly1Cat和Assembly1Bird: public class Assembly1Bird { public Assembly1Bird() { } public Assembly1Bird(Assembly1Cat cat) { } public Assembly1Bird(Assembl

我希望有人能对程序集引用的主题以及C编译器如何确定何时需要对程序集的引用有点了解

因此,要设置舞台,请以以下示例为例:

组件1包含Assembly1Cat和Assembly1Bird:

public class Assembly1Bird
{
    public Assembly1Bird()
    {

    }
    public Assembly1Bird(Assembly1Cat cat)
    {
    }

    public Assembly1Bird(Assembly2Dog dog)
    {
    }

}

public class Assembly1Cat
{
}
组件2包含组件2日志:

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无参数构造函数成功构建解决方案,但一旦我们尝试并使用Assembly1Birdcat构造函数,我们就会想起cat位于Assembly1中,我们需要Assembly1Birddog构造函数引用Assembly2

我在这里的最佳猜测是,一旦我们离开默认构造函数或无参数构造函数并引用bird类中的任何其他构造函数,编译器就会检查所有构造函数、它们的参数和引用


如果您对此有任何可靠的解释,我们将不胜感激

因为您的代码直接引用了需要该类型的其他代码。你不能指望编译器说你接触的类型是我不知道的。。这是一种静态类型的语言。。不是动态的。这取决于超负荷解决方案。它走了,哦,看!构造函数参数。。让我们查找所有接受参数的构造函数。这是一只,猫。这是另一个。。。等待狗这是什么?是的,你是对的。真奇怪。我要求解释!