gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:47:46 26 4
gpt4 key购买 nike

假设我们有 3 层应用程序,并且有三个名为 P1、P2、P3 的项目。

依赖关系:P1(数据)<< P2(业务逻辑)<< P3(表示)

P2 有一个基类 X,它是在 P2 的另一个类 Y 中继承的。因此,我们将引用 P1 添加到 P2。但是,P3 使用 P2.Y 而不是直接使用 P1.X

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

VB 中,我们仅将引用 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# 中添加两个项目?

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

最佳答案

一个可能的原因是 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 的东西。

关于c# - C# 引用依赖项与 VB 不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7862794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com