什么是传递引用?

16
在 ReSharper 中,有一个“架构视图”窗口,在其中有一个术语叫做“传递引用”,但是它有点令人困惑,不太清楚它的确切含义。来自JetBrains 的这篇博客文章谈到了这个话题,但是讲解不够详细。
我开始觉得这个选项只是为了简化解决方案图,这样说是否正确呢?
如果不是,请解释一下“传递引用”是什么意思?
1个回答

36
当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。 “大于”是一种传递关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接