添加程序集引用还需要引用基础程序集

2023-12-07

我创建了一个程序集,该程序集有一个子类,该子类派生自另一个程序集中定义的父类。

当我添加对子项的引用时,Visual Studio 还要求将引用添加到父项。

为什么会这样?如何在不丢失任何功能的情况下防止它?


你所描述的情况是部分可能的。您可以消除它们显式引用隐藏程序集的需要,但该程序集仍然会在编译时被拉入,并在运行时需要。

假设您定义了这些类:

// in assembly 1:
public class A
{
    public virtual void Foo() { }
}

// and in assembly 2:

// requires explicit reference to assembly 1 to use
public class B : A
{
    public override void Foo() { }
    public A Value { get; set; }
    public void Foo(A value) { }
}
// has implicit reference to assembly 1, but end user can ignore
public class C
{
    private A Value { get; set; }
    internal void Foo(A value) { }
    protected internal A Bar() { return new A(); }
}
// usable at runtime even if assembly 1 is missing, as long as you don't call Foo()
public class D
{
    public void Foo() { A blah = new A(); }
    public void Bar() { }
}

如果最终用户使用类 B,他们将需要对程序集 1 的显式引用。由于 A 是 B 公共接口的一部分,因此为了使用 B,您必须了解 A。对 A 有 3 种不同的公共引用,并且他们中的任何一个都需要了解 A 才能使用 B。

然而,类 C 引用了 A,但所有引用都是私有/内部/本地的。由于对 A 的每个引用都是从外部隐藏的,因此最终用户不必显式了解程序集 1。运行时仍然需要它,但您不必将其添加为引用,它是间接引用。

如果最终用户使用类 D,而不使用 B 或 C,则只有调用 D.Foo()(它具有 A 类型的局部变量)时才会加载程序集 1。实际上,您可以自由地使用 D.Bar()即使程序集 1 在运行时完全丢失。尽管如果您调用 D.Foo() 并且程序集 1 丢失,您将得到一个异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加程序集引用还需要引用基础程序集 的相关文章

随机推荐

  • Python 2.6 GC出现清理对象,但内存没有释放

    我有一个用 python 2 6 编写的程序 它创建了大量短暂的实例 这是一个典型的生产者 消费者问题 我注意到 当创建这些实例时 top 和 pmap 报告的内存使用量似乎会增加 并且永远不会下降 我担心我使用的某些 python 模块可
  • Terraform terraform_remote_state 部分配置

    我的团队严重依赖 Terraform 中的 S3 远程状态 我们使用 backend configCLI 的功能是在初始化项目时指定 S3 配置 因此我们实际的 terraform 代码如下所示 terraform backend s3 只
  • 正则表达式删除重复字母但不删除数字

    删除相邻重复字母但不删除数字的适当正则表达式是什么 例如 p11ppppl gt p11pl 我有以下正则表达式 w s 1 g 但这也会替换重复的数字 我会这样做 可视化here a zA Z 1 g 下面是一个 Python 示例 In
  • 当 x 趋于无穷大时如何绘制 f(x)

    我正在根据一些数据点绘制一条曲线 points 0 0 0 0 1 3 3 5 我希望它能够达到 比如说 当 x 达到时 y 10infinity 换句话说 要附加的额外 点 是 float inf 10 有没有办法告诉matplotlib
  • Image.onload() 的 JavaScript 循环/范围问题

    我正在尝试使用 JavaScript 循环访问一个对象 并将该对象的所有子对象添加到 HTML5 画布中 画布位正在工作 没有问题 但由于某种原因 我所有的图像最终都是相同的大小 最后一个子对象 背景 的大小 我假设它与我的循环和 this
  • 隐式定义的变量会引发运行时错误,而显式定义的变量则不会

    使用 VB NET 我尝试按照 ReSharper 的指南清理代码库 我目前有以下代码 oSearchInput is defined outside this question Dim oSearchRoutines As New Sea
  • 我想在java小程序中使用Robot类来让Web浏览器移动和单击鼠标

    我创建了这个小程序 它将鼠标移动到屏幕上的 1000 个位置 它可以作为应用程序运行 但不能在小程序中运行 我已经创建了签名小程序 但它仍然不会移动鼠标 我应该怎么做才能让我的机器人类在浏览器中工作 我的代码如下 import java a
  • 为什么我不能创建一个大小由全局变量确定的数组?

    为什么数组a没有被全局变量初始化size include
  • jqGrid:子网格不填充数据

    我有一个子网格 当您单击 Cheese 旁边的 号时 会触发 ajax 查询 并且我会看到子网格列名称 但实际数据不会填充到子网格中 无论我尝试扩展哪个网格 问题都会发生 但 奶酪 示例如下所示 您可以在屏幕截图中 FireBug 输出的底
  • 在 ASP.NET MVC 中匹配跨多个“/”的 URL 参数

    在 ASP NET MVC 中匹配跨多个 的 URL 参数的最佳方法是什么 Eg URL http example com controller action p1 p2 p3 p4 我只想将一个参数传递给操作方法 上面是 p1 p2 p3
  • scapy 数据包操作和原始 pkt.time

    我有 python scapy 和平代码将我的数据存储到数据库中 IP src 和 dst 端口 我用它来进行一些统计 在某些数据包上 我正在执行一些操作 更改目标端口 然后将它们发送回接口 问题是我正在操作的这个数据包具有与原始数据包不同
  • 如何在nodejs中使用getRandomValues()?

    我正在使用 Javascript 生成wireguard 密钥对 但它是面向浏览器的 因此我删除了窗口对象 并且还有一个阻止创建私钥的问题 问题是这行代码我无法在nodejs中运行 function generatePresharedKey
  • BigQuery 试运行会返回什么?

    BigQuery 文档说 在表的较小分区而不是一个大表上测试查询 如果使用 API 请验证查询的语法并使用 dryRun 标志获取数据处理统计信息 但他们也表示 对于 dryRun 如果设置 则不会实际运行查询 有效的查询将返回空响应 而无
  • 调用 GBrowserIsCompatible() 时 Google 地图 API JavaScript 错误

    我在以下行中收到错误 if GBrowserIsCompatible 这是我的代码仍然无法工作
  • 尝试将 SELECT SCOPE_IDENTITY() 作为 C# 变量

    我正在一个表中插入一行 然后想要获取该新 ID 以便我可以将其添加到存储电子邮件地址的另一个变量中 var db Database Open myDB var insertCommand1 INSERT INTO myDB FirstNam
  • 寻找指南针 2 度之间最接近的差异 - Javascript

    我基本上是想找出指南针上两个点相距多少度 例如 如果一个人面朝 270 度 而指南针为 280 度 那么这两点之间就有 10 度 如果相对于第一个标题 它在左侧 我还想要一个负数 在右侧则为正数 例如 当 to 标题为 350 和 020
  • 防止选择和复制

    我想在 html 页面中不活动选择和复制文本 当我使用 Javascript 且处于非活动状态时 右键单击用户可以使用 Ctrl V 你不能 甚至不要尝试 不要惹恼你的用户 如果您将其公开发布在网络上 则可以复制 从技术上讲 用户一看到它就
  • 如何使用 Spring AOP 和 SPring boot 进行日志记录

    我使用与本示例教程中相同的 LoggingAspect 类https www javaguides net 2019 05 spring boot spring aop logging example tutorial html 但是当我调
  • 困惑为什么 PyGame 显示黑屏

    因此 在我决定问这个问题之前 我做了一些研究 看看我的问题是什么 并发现了这一点 代码仅在 Pygame 窗口中产生黑屏然而 这并不是那么有帮助 因为我没有遇到与此人相同的问题 我确信我的 PyGame 没有过时或类似的东西 因为我的代码的
  • 添加程序集引用还需要引用基础程序集

    我创建了一个程序集 该程序集有一个子类 该子类派生自另一个程序集中定义的父类 当我添加对子项的引用时 Visual Studio 还要求将引用添加到父项 为什么会这样 如何在不丢失任何功能的情况下防止它 你所描述的情况是部分可能的 您可以消