我正在阅读"框架设计指南"书和我对其中一条规则感到困惑(第142页)和#34;不要使用非默认的索引属性。"
我很困惑,有几个原因 - 索引属性不应该意味着索引器,但如果它是关于属性什么是默认属性(自动一个?),如果这是一个错字("索引 R 属性"),它是关于索引器的,我发现了一些提示,也许带有单个int
参数的索引器被称为默认值(是吗?),但在这种情况下C#做了不要禁止其他人。
我无法解读这个。
答案 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代码可以互操作。