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

标签 c# vb.net dependencies reference

假设我们有 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/

相关文章:

database - 在 vb.net 中正确处理空数据库值

android - 在 eclipse 中使用 egit 导入 android 依赖项目的最佳 git 结构

c# - TPL 数据流,Post() 和 SendAsync() 之间的功能区别是什么?

c# - 使用 NLua 的 C# 类实例

C# Windows 窗体 - 使用 MultiSelect、OpenFileDialog 和 FileBrowserDialog 选择并复制多个文件

java - 如何使用 Maven 在 MANIFEST.MF 中为 JBoss AS 7 生成模块依赖项?

clojure - 如何在Clojure中使用expt函数?

c# - 如何捕获异常并继续程序? C#

vb.net - 按 F1 时将焦点设置为文本框

c# - 使 MediaElement 支持更多视频编解码器