什么是传递引用?

What is a transitive reference?

提问人:aybe 提问时间:5/16/2014 最后编辑:Pangaybe 更新时间:3/2/2021 访问量:4074

问:

在ReSharper中,有“架构视图”窗口,其中有传递引用的术语,但它的真正含义有点令人困惑。他们的这篇博文涵盖了它,但方式不完整。

我开始认为此选项仅用于简化解决方案图,这是正确的吗?

如果不是,你能解释一下传递引用是什么意思吗?

架构 参考 锐化器

评论


答:

36赞 citizenmatt 5/21/2014 #1

当 ReSharper 谈到传递引用时,它是指通过引用另一个中间程序集隐式生成的对程序集的引用。例如,假设我有一个带有程序集“Core.dll”的项目。我创建了一个名为“Features.dll”的项目,该项目引用了 Core.dll。这是一个直接的参考。

现在假设我添加了一个测试项目 Features.Tests.dll。此程序集测试 Features.dll 中的代码,因此直接引用 Features.dll。然后,引用如下所示:

Features.Tests.dll -(References)-> Features.dll -(References)-> Core.dll

每个 dll 都直接引用它使用的 dll。但我们也可以说 Features.Tests.dll 在 Core.dll 上有一个“传递引用”。即:

Features.Tests.dll -(References)-> Core.dll

毕竟,如果 Core.dll 不存在,它就无法运行。

使用 ReSharper 的体系结构视图时,默认情况下会隐藏传递引用,首先是为了简化关系图,但也因为传递引用是隐含的 - 如果关系图显示 Features.Tests.dll 引用 Features.dll,而 Features.dll 引用 Core.dll,那么 Features.Tests.dll 和 Core.dll 需要并因此传递引用 Core.dll。您可以通过启用“显示可传递引用”按钮来使传递引用更明显。

记住传递引用如何工作的一种方法是考虑数学,例如,如果 A > B 和 B > C,那么 A > C。“大于”是一种传递关系。