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

Onu*_*ğlu 5 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#中添加两个项目?

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

Tho*_*que 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);
}
Run Code Online (Sandbox Code Playgroud)

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


编辑:实际上我错了:只有在引用时才必须引用 P1 C2.Bar...VB 中的行为与 C# 中的行为完全相同,我只是尝试过(如果不添加对 P1 的引用,则会出现此错误) 。如果您以前在 VB 项目中没有此约束,那只是因为 P3 没有使用任何依赖于 P1 的东西。