TypeDescriptor 不返回继承接口的成员

2024-05-07

我的问题是 TypeDescriptor 不从继承的接口返回成员,这是它应该如何工作的吗?或者这是一个错误?

 [TestFixture]
    public class DescriptorTests
    {
        [Test]
        public void Test()
        {
                                                                    // count = 1 
            Assert.AreEqual(2, TypeDescriptor.GetProperties(typeof(IFoo)).Count);
     // it is going to fail, the Id is not going to be returned
        }

        public interface IEntity
        {
            int Id { get; set; }
        }

        public interface IFoo : IEntity
        {
            string Name { get; set; }
        }
    }

这不是一个错误。来自ECMA CLI 规范 http://www.ecma-international.org/publications/standards/Ecma-335.htm:

8.9.11 接口类型推导

接口类型可能需要 实施一项或多项其他 接口。任何实现的类型 对接口类型的支持应 还实施对任何 指定的所需接口 界面。这不同于 对象类型继承有两种方式:

  • 对象类型形成单一继承树;接口类型 不是。
  • 对象类型继承指定了如何继承实现; 所需的接口不需要,因为 接口没有定义 执行。所需接口 指定附加合同 实现对象类型应 支持。

为了突出最后一个区别, 考虑一个接口,IFoo, 那 有一个单一的方法。一个接口,IBar,由它派生而来的是 要求任何对象类型 支持IBar也支持IFoo。 它没有说任何关于哪个 方法IBar本身就会有。

8.10 成员继承

只有对象类型可以继承 实现,因此只有对象 类型可以继承成员(参见 §8.9.8)。虽然接口类型可以是 从其他接口类型派生, 他们只是“继承”要求 实施方法契约,永远不要 字段或方法实现。

Edit...

如果您想获取接口的属性,包括其祖先的属性,那么您可以执行以下操作:

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

TypeDescriptor 不返回继承接口的成员 的相关文章

  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • Haskell 中美元符号 ($) 和 id 函数之间有关系吗?

    这几天我正在读一篇评论莫纳德挑战 http mightybyte github io monad challenges 我强烈推荐给像我这样的 Haskell 初学者 我最终得到了这个线程 https news ycombinator co
  • 如何从symfony2中的表单对象获取每个字段的错误消息?

    我按照这个教程http symfony com doc current forms html http symfony com doc current forms html我完美地呈现了我的插入表单 但只有一个问题我无法解决 当表单无效时
  • Solr 过滤查询 - 字符串与整数

    假设我正在尝试查询一堆具有类别的文档 并且我想将查询限制为指定的类别 据我所知 这只是使用 fq 参数 过滤器查询 我想知道将参数设置为整 数而不是字符串或数据通常的情况是否会提高性能 我只是会在右侧犯错 但我想我应该仔细检查一下 以防万一
  • 将 ElasticSearch SearchResponse 对象转换为 JsonObject

    我想将elasticsearch搜索结果转换为Json对象 我还没有找到任何直接转换的正确方法 SearchResponse response client prepareSearch index setExplain true execu
  • 创建一个类的所有常量的数组?

    我正在使用一个定义了近 20 个常量的类 因为我希望所有这些常量值都在一个数组中 我只想知道 有没有什么方法可以创建一个类的所有常量的数组 我尝试过compact https www php net manual en function c
  • 使用 ruby​​ 获取 URL 的内容长度

    我正在尝试编写一个 ruby 脚本 该脚本使用以下命令获取有关网站上文件的一些详细信息net http 我的代码如下所示 require open uri require net http url URI parse asset res N
  • OAuth 2.0:优点和用例 - 为什么?

    谁能解释一下 OAuth2 的优点以及为什么我们应该实施它 我问这个问题是因为我对此有点困惑 这是我目前的想法 OAuth1 更准确地说是 HMAC 请求看起来合乎逻辑 易于理解 易于开发并且非常非常安全 相反 OAuth2 带来了授权请求
  • 在 C 或 C++ 中返回结构是否安全?

    我的理解是不应该这样做 但我相信我已经看到过这样做的示例 注意代码不一定在语法上正确 但想法就在那里 typedef struct int a b mystruct 然后这是一个函数 mystruct func int c int d my
  • 如何解决使用 UWP GetFolderFromPathAsync 时访问被拒绝的问题

    尝试使用 GetFolderFromPathAsync 从 UWP 应用访问文件系统时 我的访问被拒绝 我的 UWP 应用需要访问 Windows 10 文件系统 我正在使用 BroadFileSystemAccess 但被卡住了 我下面的
  • 如何关闭 IntelliJ 编辑器中的无限空白?

    如何删除 IntelliJ 中行尾后移动光标的功能 文件菜单 gt 设置 gt 编辑器 gt 常规 gt 虚拟空间并取消选中 允许在行尾后放置插入符号 您还可以取消选中 虚拟空间 面板中的其他选项
  • iOS Flutter 与 Firebase:启动时 FlutterAppDelegate 中出现白屏和 SIGABRT

    现在在多个项目中 非常不一致的是 我在启动应用程序时出现白屏 并且 Xcode 显示错误 Thread 1 signal SIGABRT 在线上 objc class AppDelegate FlutterAppDelegate 这些都是i
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 非等值连接一步添加 data.table 中范围表的所有列

    我确信我忽略了显而易见的事情 但我找不到一种方法来连接 查找 表的所有列data table非等值连接一步到位 我看了阿伦的演讲 https github com Rdatatable data table wiki talks ArunS
  • jQuery Cycle 幻灯片的动画内容

    每张幻灯片都由标题框和图像组成 div div class slide div class slideTitle h2 First title h2 div img src image jpg div div class slide div
  • 如何在不退出的情况下更新会话值?

    With NextAuth js https github com nextauthjs next auth 如何在不注销并再次登录的情况下更新会话对象内的值 例如 一旦用户登录 我就会使用会话中存储的 URL 来显示用户的头像 我还提供用
  • 垂直居中弹出框 div

    我正在尝试制作一个类似 iPad 的弹出框 div 作为练习 但我不知道如何使弹出框 div 垂直居中 因为内容宽度 高度未指定 http jsfiddle net mbYyR 5 http jsfiddle net mbYyR 5 我希望
  • 有没有办法将 fopen_s() 与 GCC 一起使用,或者至少创建一个 #define ?

    MSVC 编译器说fopen 已弃用 建议使用fopen s 有什么办法可以使用吗fopen s 并且仍然便携 任何想法 define 微软的 s函数是不可移植的 我通常使用等效的 C89 C99 函数并禁用弃用警告 define CRT
  • 在组件之间路由时如何保持 React 新的 Context API 状态?

    Summary 1 你知道当通过路由挂载 卸载时如何保持Context Provider的状态吗 2 或者你知道一个维护良好的 Flux 实现支持多个独立的存储吗 详细地 除了 React 组件自己的状态之外 到目前为止我主要使用的是 re
  • 在箱线图中添加多条水平线

    我知道我可以使用类似命令向箱线图添加一条水平线 abline h 3 当单个面板中有多个箱线图时 我可以为每个箱线图添加不同的水平线吗 在上图中 我想为 1 添加行 y 1 2 为 2 添加行 y 1 5 为 3 添加行 y 2 1 我不确
  • TypeDescriptor 不返回继承接口的成员

    我的问题是 TypeDescriptor 不从继承的接口返回成员 这是它应该如何工作的吗 或者这是一个错误 TestFixture public class DescriptorTests Test public void Test cou