首页 > 后端开发 > C++ > C# 数组如何在没有显式计数属性的情况下实现 IList?

C# 数组如何在没有显式计数属性的情况下实现 IList?

Susan Sarandon
发布: 2025-01-05 09:30:39
原创
387 人浏览过

How Do C# Arrays Seemingly Implement IList Without an Explicit Count Property?

尽管缺少 Count 属性,数组如何部分实现 IList

在 C# 中,数组实现了 IList,但它们缺少接口中显式声明的 Count 属性。这引发了人们的疑问:这种行为是违反接口实现规则还是仅仅是一种误解。

深入框架

虽然数组没有实现 IList ;他们直接实现了非通用 IList。此外,CLR动态地生成专门的数组类型,这在理论上可以实现通用的IList T 。界面。然而,直接的实现并不存在。

CLR 的嘎嘎鸭方法

CLR 为数组实现了特殊技术,类似于用于值的技术类型。编译器识别对 IList 的强制转换。并指示 CLR 通过底层数组对象来实现它。然后,CLR 将执行委托给隐藏的 System.SZArrayHelper 类,该类实现了必要的接口。

Count 属性实现

尽管没有显式声明,但 Count 属性可以被访问。然而,它的实现如下:

internal int get_Count<T>() {
    // Warning: "this" is an array, not an SZArrayHelper
    T[] _this = JitHelpers.UnsafeCast<T[]>(this);
    return _this.Length;
}
登录后复制

正如评论所暗示的,这种行为可能被认为是违反规则的,但它有助于高效的数组处理。

结论

数组部分实现了 IList;通过 CLR 的鸭子式方法。虽然 Count 属性没有显式定义,但它是由 CLR 在内部实现的,允许数组和泛型集合之间的无缝集成。

以上是C# 数组如何在没有显式计数属性的情况下实现 IList?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板