2015-09-16 2 views
2

Я читаю «Руководство по дизайну каркаса», и я озадачен одним из правил (стр.142) «Не используйте индексированные свойства, отличные от параметров по умолчанию».Что такое «свойство индексирования по умолчанию» в CLR/C#?

Я смущен, по нескольким причинам - индексируются свойство не должно означать индексатор, но если речь идет о недвижимости, что по умолчанию свойства (авто один?), Если это опечатка («indexe R свойства»), и речь идет о индексаторах, я нашел некоторые подсказки, что, возможно, индексщик с единственным параметром int называется значением по умолчанию (это?), но в этом случае C# не запрещает другие.

Я не могу это расшифровать.

ответ

3

В некоторых языках (например, Delphi) вы можете определить именованные индексируется собственности (страны), например,

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#, это nameless (default) свойство индекса - indexer.

+0

Так что индексатор по умолчанию существует в C#, потому что он использует ключевые слова this this перед указанием параметров, а не по умолчанию - с именем, отличным от 'this'? Я прав? Именованные/анонимные как-то более понятны для меня :-). – greenoldman

+0

Вы правы, и когда мы вызываем индексатор, например. 'myList [i]' мы не используем никакое * имя * (сравните с примером * Delphi * выше: 'MyCollection.Items [i]') –

1

C# Indexers всегда по умолчанию indexed properties. Невозможно создать свойство индексирования, отличное от значения по умолчанию, в C#. В Visual Basic вполне возможно создать нестандартные properties, которые используют индексы.

Поскольку нет никакого способа для C# программы, чтобы сделать использование индексируются имущества не по умолчанию, это почему руководящие принципы проектирования рамочных советуют создавать их - так, что C# и VB код могут взаимодействовать.

+0

@greenoldman - Я не уверен, где вы смотрите, где в него входят дополнительные аргументы. Я связался с тремя разными документами. –

+0

Спасибо, но я не мог понять, что делает индекс по умолчанию или не по умолчанию. – greenoldman

+1

@greenoldman - ну, если вы просто смотрите на C#, вы не сможете, потому что вы не можете создать индексированное свойство, отличное от стандартного, в C#. Причина, по которой он называется индексированным свойством по умолчанию, заключается в том, что он доступен без * именования * свойства. Например. 'myObject [1]' обращается к свойству по умолчанию 'myObject'. * if * C# поддерживает индексированные свойства, отличные от параметров по умолчанию, тогда у вас будет 'myObject.NonDefaultProperty [1]' или что-то в этом роде. –

Смежные вопросы