接口协方差问题

2024-06-25

以下代码示例:

interface I<out T>
    where T : class, I<T>
{
    T GetT();
}

interface J : I<J>
{
}

abstract class B<T> : I<T>
    where T : B<T>
{
    T I<T>.GetT()
    {
        return null;
    }
}

class C : B<C>, J
{
}

无法编译(在带有 SP1 的 VS2010 下)并出现以下错误:

Error   4   'C' does not implement interface member 'I<J>.GetT()'

然而,C 确实实现了(通过其基 B)I,由于 I 被声明为协变,因此它也应该捕获 I (如 C : J)。

这是编译器错误吗?如果不是,为什么我不被允许这样做?


即使它是协变的,你无法更改接口的返回类型。这与非泛型类中的协方差没有什么不同。

interface Animal
{
    Animal GetAnimal();
}

class Cat : Animal
{
   //Not ALlowed
   Cat GetAnimal()
   {
       return this;
   }

   //Allowed
   Animal GetAnimal()
   {
       return this;
   }   
}

问题是 C 作为一个专业化B<C>回报C I<C>.GetT(),但是 J 的规范要求J GetT().

请尝试以下操作:

interface I<out T>
    where T : class, I<T>
{
    T GetT();
}

interface J : I<J>
{
}

abstract class B<T,U> : I<U>
    where T : B<T,U>, U
    where U : class, I<U>
{
    U I<U>.GetT()
    {
        return null;
    }
}

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

接口协方差问题 的相关文章

  • SearchBoxControl 专注于在 Win8.1 上启动应用程序

    我在 Windows 8 1 应用程序中使用新的 SearchBox 控件 但每次启动应用程序时 SearchBox 都会获得焦点并显示搜索历史记录 我尝试将焦点设置在页面上的另一个控件上 但它不起作用 那么如何在不显示搜索历史记录的情况下
  • 如何在 C# 中从这个分层父子结构中查找任何项目

    如何从列表中查找任何项目 因为它是动态的 它可能位于列表的任何位置的父项或子项中 并且当子项计数为0时需要停止查找 下面是列表的模型和分层父子结构示例 例子 父级 gt 子级 gt 子级 gt 子级或父级 gt 子级 gt 子级 gt 子级
  • 理解 scala 的 _ 与 Any/Nothing

    如果一个类具有协变类型参数 例如Iterable A http www scala lang org archives downloads distrib files nightly docs 2 10 1 library index ht
  • 将 SqlDataReader 中的数据放入 HTML 表中

    我在数据库中有一些数据可以用来读取SqlDataReader 我想将它们放入我的 ASP NET 站点的 HTML 表中 但我不知道该怎么做 您可以使用网格视图 它是一个 asp net 控件 您只需将 datareader 绑定到 gri
  • C# 数组如何存储在内存中

    我想我的主要问题是 只要我不重新初始化 新字节 作为参数传递的数组 这总是有效吗 static unsafe decimal GetDecimal byte ba decimal decimal PTR fixed byte byte PT
  • 实体框架代码优先:如何手动更新数据库?

    我构建了一个小型 WPF 演示应用程序 它使用 EF Code First 将其数据保存在 SQL CE 4 0 DB 中 除非我从模型对象中删除属性 否则它工作正常 例如 如果我从此类中删除 HosteBy public class Di
  • 由于 EndpointDispatcher 上的 AddressFilter 不匹配,无法在接收方进行处理

    我正在使用启用 ajax 的 WCF 当我在 Web 浏览器中打开 url 时 出现此错误 带有 Action 的消息http localhost 22219 MobileService svc GetProductCategories h
  • 午夜的 DateChange 事件[重复]

    这个问题在这里已经有答案了 可能的重复 后台工作人员检查什么时候是午夜 https stackoverflow com questions 3053695 background worker check for when its midni
  • 与嵌套泛型集合的混淆

    请帮助我理解为什么add1 and add4 报告错误以及原因add2 and add3 不 具体来说 请举例说明如果编译器允许其中每一个进行编译 则会产生不良后果的示例 class InnerTypeConfusion interface
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum
  • Linq for xml 解析返回 null 元素

    我的 xml 文件如下所示
  • 协变返回类型和类型转换

    s gt duplicate 返回类型的对象Box 但我在初始化它时遇到错误Box 看起来它正在转换回Shape 如果将协变返回类型转换回基类指针 那么它有什么意义 struct Shape virtual Shape duplicate
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • IEnumerable 的随机顺序

    我有一个 IEnumerable 集合如下 var result1 GetResult1 Returns 2 4 5 6 我必须处理元素并以随机方式创建另一个集合 结果应如下 var result2 GetResult2 result1 R
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 是否可以使用自定义类型属性的内容创建果园自动路线?

    我有一个 Orchard cms 模块 设置了一些附加的内容类型 并通过代码添加了一个 AutoRoute 组件 一切都很完美 但是我对默认的永久链接模式不满意 我想要做的是添加自定义模式并使用我的内容类型中的公共属性之一 就我而言 自定义
  • ASP.NET Request.UserHostName 不包含主机名

    如果创建新数据集 我需要将请求计算机的主机名存储在数据库中 为了向用户清楚地表明这一点 这都是公司内部的 我们在用户填写的表单中将其显示为三个文本框 这三个文本框的填充方式如下 protected void Page Load object
  • 有没有办法创建支持接口的 DynamicObject?

    我是否可以定义一个派生自 DynamicObject 并支持接口 ICanDoManyThings 的类 而不必实现接口中的每个方法 我正在尝试创建一个动态代理对象 并希望此类上的方法调用由 MyProxyClass TryInvokeMe
  • Scala 中的逆变和协变

    abstract class Bhanu A val m List A gives error contravariant type A occurs in covariant position in type gt List A of v
  • 如何获取字典元素的相对位置?

    我有下一个 C 代码 Dictionary

随机推荐

  • 是否使用了分配提示?

    我正在读书为什么 C 分配器中没有重新分配功能 https stackoverflow com q 3105001 961353 and 是否可以在运行时在堆上创建一个数组 然后在需要时分配更多空间 https stackoverflow
  • 是否可以在 mailto url 中添加新行?

    我正在尝试打开电子邮件客户端mailto来自我的反应本机应用程序的网址 用于打开客户端的代码片段 const body my email nbody Linking openURL mailto email protected cdn cg
  • 不同浏览器中的HTML输入字段高度不同

    现在的情况 在一个简单的网站上 我有一个具有固定高度的输入控件 其中有一个具有特定字体大小的文本 我希望该文本在输入字段的中间垂直对齐 但即使我使用了重置CSS 链接here https github com necolas normali
  • 单链表的时间复杂度

    我正在研究数据结构 单链表 该网站称单链表的插入和删除时间复杂度为O 1 我错过了什么吗 网站链接 http bigocheatsheet com 我用 C 做这个 而且我只有一个root pointer 如果我想插入到最后 那么我必须一直
  • 在 Eclipse 中调试 Android NDK C/C++ 代码 - 未命中断点

    我下载了适用于 Linux 的 Android SDK Bundle 和 Android NDK 安装了ADT 我安装了CDT 我创建了一个 Android 项目并添加了本机支持 jni 然后我用java代码编写了本机函数 并用c 代码导出
  • C语言中如何计算执行时间?

    如何计算以下代码中的执行时间 include
  • MySqlDataReader GetBytes 缓冲区问题...

    我发现 MySqlDataReader GetBytes 实现有一个奇怪的怪癖 只是想知道这是否众所周知 因为我似乎在网上找不到任何有关它的文章 如果您按照以下代码示例进行操作数据库读取器 http msdn microsoft com e
  • SQL - 选择具有最大值的所有行

    我有这个 SQL 查询 SELECT id COUNT AS price FROM SELECT FROM rt WHERE somecondition AS st JOIN tt ON st id tt id GROUP BY id 现在
  • 如何检测 Facebook Messenger 的气泡何时打开?

    Facebook 使用一项服务在 Android 上推送 Messenger bubble 如下所示 http www piwai info chatheads basics http www piwai info chatheads ba
  • 仅在应用程序升级时升级行

    如果我只想在用户升级应用程序时更新数据库行一次 那么您会在数据库处理程序类的 OnUpgrade 方法中执行此操作 还是会在基于 SharedPreferences 的应用程序类中将其作为 asyncTask 执行 谢谢 应用程序中数据库更
  • Laravel:在刀片页面中使用 asset 方法有什么好处?

    在一些 Laravel 示例中 我看到资产被这样调用 与这样做相比 使用该方法有什么优点 如果您选择后者 则当您访问任何包含正斜杠的 URL 时 这些 URL 将不起作用 例如 不使用asset如果您在主页上 则看起来工作正常 但如果您在
  • 如何更改 Maven 日志记录级别以仅显示警告和错误?

    我想阻止 Maven 显示信息消息 我只想看到警告和错误 如果有 我怎样才能实现这一点 最好是通过更改调用 Maven 的命令行 回答你的问题 我做了一个小调查 因为我也对解决方案感兴趣 Maven 命令行详细选项 根据http books
  • http:多余的response.WriteHeader调用

    我有一个HandleFunc 如果成功的话 我希望 显然 能够 sent a 200回复 在回复中写一条信息性消息 但是以下代码片段 在快乐路径中执行 if fullRun w Write byte successMsg w WriteHe
  • 帮助我改进更多 SSE2 代码

    我正在寻找一些帮助来改进 core2 cpu 上的双线性缩放 sse2 代码 在我的 Atom N270 和 i7 上 此代码比 mmx 代码快大约 2 倍 但在 core2 cpu 下它只等于 mmx 代码 代码如下 void Conve
  • 访问层次结构之外的顶级资源

    有没有一种方法可以在verilog中综合架构 以便深度嵌套的端点可以访问一些顶级引脚 来自 ucf 而无需通过层次结构的每个模块明确路由引脚 就我而言 我有一个带有深度嵌套端点的 PCIe 块 在端点处有一个地址解码器 需要从顶层引脚提供一
  • 调整FontSizeToFitWidth 与SizeToFit

    我在用着SizeToFit因为我不必指定Frame属性具有自适应大小UIButton UILabel 就我而言 它是工具栏上的一个按钮 现在我做了以下观察 如果我使用AdjustsFontSizeToFitWidth和 一起SizeToFi
  • 如何将 Excel Interop 与 ClosedXml 混合使用:样式

    我试图在 Excel VSTO 加载项中实现以下目标 从 Excel 文件的原始版本复制 应用单元格格式 原因 在处理 Excel 文件时 我们偶尔需要更改文件的样式 颜色 以便能够仅处理某些单元格 文件处理后 我们需要恢复原始的单元格格式
  • Android 复杂形状按钮

    你好安卓开发者 我的 UI 设计师想要一个复杂形状的按钮 但我不知道该怎么做 请帮助我 这就是她想要的设计image http img823 imageshack us img823 984 q43b png 有很多方法可以做到这一点 最简
  • 如何从hibernate会话获取jdbc连接? [复制]

    这个问题在这里已经有答案了 我想从hibernate会话获取jdbc连接 hibernate会话中有方法 即 session connection 但它已被弃用 我知道这仍然有效 但我不想使用已弃用的方法 因为我确信他们必须为此提供一些替代
  • 接口协方差问题

    以下代码示例 interface I