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 不返回继承接口的成员 的相关文章

随机推荐

  • 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