CLR/ c#中的“默认索引属性”是什么?

本文关键字:属性 是什么 索引 默认 中的 CLR | 更新日期: 2023-09-27 18:13:01

我正在阅读《框架设计指南》这本书,我对其中一条规则感到困惑(第142页)"不要使用非默认索引属性。"

我很困惑,有几个原因——索引属性不应该意味着索引器,但如果它是关于属性的默认属性是什么(自动属性?),如果这是一个错字("index R property"),它是关于索引器的,我发现了一些提示,也许索引器与单个int参数被称为默认的(是吗?),但在这种情况下c#不禁止其他的。

我看不懂

CLR/ c#中的“默认索引属性”是什么?

在某些语言中(例如Delphi),您可以定义命名索引属性(ies),例如

  type 
    TMyCollection = class(TObject)
    private
      ...
    protected 
      function GetItem(idx: LongInt): LongWord; virtual;
    public
      // Named ("Items") indexed (note "idx") property 
      property Items[idx: LongInt]: LongWord read GetItem; 
    end;

CLR 支持这个构造

https://msdn.microsoft.com/en-us/library/vstudio/ms229061 (v = vs.100) . aspx

然而,

并不推荐使用这样的结构,一些语言( c# 就是一个例子)强制这个准则。c#中只允许无名 (default)索引属性- indexer

c#索引器总是默认的索引属性。在c#中不可能创建非默认索引属性。在Visual Basic中,创建使用索引的非默认属性是完全可能的。

由于c#程序没有办法使用非默认索引属性,这就是为什么框架设计指南建议不要创建它们-以便c#和VB代码可以互操作。