C# Diamond-继承(接口实现)

2023-12-30

如果一个类从两个单独的接口实现一个接口,它的行为是否与仅实现一次相同?

Example:

public interface IAnimal { /* ... */ }
public interface IFullAnimal : IAnimal { /* ... */ }

public interface IBear : IAnimal { /* ... */ }
public interface IFullBear : IBear, IFullAnimal { /* ... */ }

// and implementing IFullBear:
public class FullBear : IFullBear { /* ... */ }

Above, FullBear实施IAnimal来自两者IFullAnimal and IBear通过IFullBear。这是否会引入有关 IAnimal 实现的任何奇怪行为因为两者IFullAnimal and IBear不提供任何有关实施的信息IAnimal(因为语言不允许这样做)。


不,这是一种非常常见且无害的情况。System.Collections.Generic命名空间是类似“冗余”接口声明的一个很好的例子:

 public class List<T> : IList<T>, 
                        System.Collections.IList,
                        IReadOnlyList<T>

Both IList<T> and IReadOnlyList<T>明显实施IEnumerable<T>世界还没有结束。

不要将其与接口重新实现,这确实改变了行为:

interface IFoo
{
    void Foo();
}

class Base: IFoo
{
     public void Foo() { Console.WriteLine("Base Foo!");
}

class Derived: Base { }

class DerivedWithATwist: Base, IFoo //redeclares interface
{
    void IFoo.Foo() { Console.WriteLine("Derived Foo!");
}

And now,

IFoo foo = new Base();
IFoo derived = new Derived();
IFoo derivedWithATwist = new DerivedWithATwist();

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

C# Diamond-继承(接口实现) 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 在放置新分配的对象时不调用析构函数可以吗?

    假设我有一个固定的内存缓冲区 char buffer And I 使用placement new 在该缓冲区中分配我的结构 struct S std tuple
  • 如果表单数据边界包含在附件中怎么办?

    让我们看下面的例子multipart form data 取自 w3 com http www w3 org TR html401 interact forms html h 17 13 4 2 Content Type multipart
  • 将模板应用于具有属性的子节点

    我想将模板应用于具有指定属性的子节点的节点 并且我很好奇是否可以使用
  • 获取 BQ 公共数据集中的顶级专利国家/地区和代码

    我正在尝试使用分析函数来获取专利申请量排名前 2 的国家 地区 并在这两个排名前 2 的国家 地区中获取排名前 2 的申请类型 例如 答案将如下所示 country code US P US A GB X GB P 这是我用来获取此信息的查
  • Caffe 模型为每个图像提供相同的输出

    我刚刚使用预定义的 prototxt 和 caffemodel 文件在 caffe 中加载了 alexnet 然而 将任何图像发送到模型都会返回与 fc7 层的输出相同的值 这是代码片段 net caffe Net alexnet trai
  • 使元素在 css 缩放后表现相同

    我一直在用 javascript 操作 div 有时我需要让这些 div 适合大小不断变化的容器 实现这一目标的一种方法是使用 css 缩放 缩放的问题在于它只是缩小了元素的图片 系统继续以相同的方式查看元素 因此所有位置等都会变得倾斜 例
  • 包含引用项目的 .config 文件

    而不是从程序集的引用输出中排除文件 https stackoverflow com questions 2011434 preventing referenced assembly pdb and xml files copied to o
  • 如何找到 C++ 中整数类型可以表示的值的范围?

    C 中整数值类型的大小和范围是特定于平台的 大多数 32 位系统上的值可以在以下位置找到 变量 数据类型 C 文档 http www cplusplus com doc tutorial variables html 如何确定特定系统的实际
  • 工人经理:不在队列中开始工作

    我有这样的代码 我需要实现任务队列 如果任务在队列中 那么就不需要添加它 我的实现如图所示 一切正常 但有时工作线程的状态仍然处于排队状态 并且新任务不会添加到队列中 就是当没有互联网的时候 我添加一个任务 当互联网出现时 任务开始用完 但
  • BufferedReader.readLine() 等待来自控制台的输入

    我正在尝试从控制台读取文本行 行数事先未知 BufferedReader readLine 方法读取一行 但在最后一行之后 它等待来自控制台的输入 为了避免这种情况应该做什么 请参阅下面的代码片段 public static String
  • 如何使用 JQuery 获取 在表中的位置?

    例如 table tr td 1 1 td td 2 1 td tr tr td 2 1 td td 2 2 td tr table 我想使用以下功能 td click function alert xxxx 得到单击时的位置 但是如何呢
  • 如何有效地跟踪地图上的空间(包括对象和空闲区域)的使用情况

    好的 我从一张空白地图开始 即 512x512 262144 像素 位置 我需要一种方法来有效地在其上绘制一些对象 然后能够找到可用空间区域 以便以后可以将更多不同的对象添加到这些可用区域中 我无法找出存储这些数据的最佳方法 或找到空闲区域
  • 如何在 Isabelle 的 ML 级别轻松编写简单的策略?

    在 Isabelle 理论文件中 我可以编写简单的一行策略 如下所示 apply clarsimp simp split def split prod splits 然而 我发现 当我开始编写 ML 代码来自动化证明 生成 MLtactic
  • For 循环正在跳过一些东西! Python

    我正在尝试运行此代码 以便它为列表的所有元素运行一个函数 出于说明目的 基本上应该打印 Possible Word possible word 对于我的列表中的所有项目 因此 如果我输入 p r s 它将运行打印 3 次 每一项打印一次 我
  • 在生产中调试反应应用程序时无法在控制台中看到我的变量

    我是反应世界的新手 并尝试在我的共享点环境中使用它 我正在使用源映射打包用于生产的应用程序 并将其上传到我将在其中使用它的共享点站点 应用程序在共享点中运行没有问题 但在开发人员工具箱中我无法完全调试它 我可以看到我的 js 文件 放置调试
  • 从 NSDate 获取时间返回 nil

    我试图在图表上显示时间 并且我有一个完整的时间戳 格式为 2012 08 28 18 50 24 当我尝试从该日期获取时间时 它在 NSDate 中返回 nil NSDateFormatter formatter NSDateFormatt
  • 使用 glvertex4i 传递网格面索引时顶点着色器错误

    初始化 GL List 进行处理 glBegin GL POINTS for i 0 i lt faceNum i mesh gt GetFaceNodes i 1 ver 0 ver 1 ver 2 ver 3 glVertex4i ve
  • 帧指针省略?有风险吗?

    我总是在编译器中打开此功能 它在阅读更干净的汇编代码时对调试有很大帮助 我认为它对速度优化方面没有太大影响 使CPU能够进行流水线操作 但至少它确实为寄存器分配提供了新的机会 因此获得了一个新的空闲寄存器EBP 不确定编译器是否会使用它 我
  • EJB 容器中的 ThreadLocal(和 Singleton)

    我编写了一个授权系统 它依赖于代表当前用户的对象 为了简化编程并提高性能 我想在用户登录后将这些对象保存在 ThreadLocal 中 它看起来像这样 public class UserCache private static final
  • C# Diamond-继承(接口实现)

    如果一个类从两个单独的接口实现一个接口 它的行为是否与仅实现一次相同 Example public interface IAnimal public interface IFullAnimal IAnimal public interfac