C# 程序集引用层次结构和构造函数
我希望有人能对程序集引用的主题以及C编译器如何确定何时需要对程序集的引用有点了解 因此,要设置舞台,请以以下示例为例: 组件1包含Assembly1Cat和Assembly1Bird: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
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类中的任何其他构造函数,编译器就会检查所有构造函数、它们的参数和引用
如果您对此有任何可靠的解释,我们将不胜感激 因为您的代码直接引用了需要该类型的其他代码。你不能指望编译器说你接触的类型是我不知道的。。这是一种静态类型的语言。。不是动态的。这取决于超负荷解决方案。它走了,哦,看!构造函数参数。。让我们查找所有接受参数的构造函数。这是一只,猫。这是另一个。。。等待狗这是什么?是的,你是对的。真奇怪。我要求解释!