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

时间:2015-09-16 08:49:33

标签: c#

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

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

我无法解读这个。

2 个答案:

答案 0 :(得分:3)

在某些语言(例如 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#中被允许的只是无名默认)索引属性 - 索引器。

答案 1 :(得分:1)

C#Indexers始终默认为indexed properties。无法在C#中创建非默认索引属性。在Visual Basic中,完全可以创建使用索引的非默认properties

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