C#引用依赖项与VB不同吗?

时间:2011-10-22 21:40:12

标签: c# vb.net dependencies reference

考虑我们有3层应用,并有三个名为P1,P2,P3的项目。

依赖性:P1(数据)<< P2(业务逻辑)<< P3(讲演)

P2有一个基类 X ,它在P2中的其他类 Y 中继承。因此,我们将ref P1添加到P2。但是,P3使用P2。 Y 并且不直接使用P1。 X

为此,我们必须将ref P2添加到P3。但是VB和C#之间存在差异。

VB 中,我们仅将ref P2添加到P3。 P2使用P1,但对P3无关紧要。我们不需要将ref P1添加到P3 。这就足够了!

但是,在 C#中,我们必须将ref P1和P2都添加到P3 ,即使P3不使用P1.X也是如此。如果您没有将ref A添加到C,则会收到以下错误:

类型'P1.X'在未引用的程序集中定义。您必须添加对程序集'P1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'的引用。

为什么我们必须在C#中添加两个项目?

或者,我们可以阻止这种行为吗?

1 个答案:

答案 0 :(得分:1)

可能的原因是P2公开公开其类型在P1中定义的成员。在这种情况下,P1也必须在P3中引用,即使您没有在P3中明确使用它。

示例:

// Assembly P1
public class C1
{
    ...
}

// Assembly P2
public class C2
{
    public string Foo { get; set; }
    public C1 Bar { get; set; }
}

// Assembly P3
void Main()
{
    C2 c = ...
    Console.WriteLine(c.Foo);
}

在上面的代码中,P3使用C2(在P2中定义),C2暴露了C1类型的成员(在P1中定义),因此P3必须引用P1 (即使它不使用C2.Bar )


编辑:实际上我错了:只有在引用C2.Bar时才必须引用P1 ... VB中的行为与C#中的行为完全相同,我只是尝试过(如果你没有添加参考P1得到this error)。如果你以前在VB项目中没有这个约束,那只是因为P3没有使用任何依赖于P1的东西。