2014-01-08 4 views
2

Наблюдая System.String класс в ILSpy я нашел следующий индексатор:Как работает индексатор строк?

public extern char this[int index] 
{ 
    [__DynamicallyInvokable, SecuritySafeCritical] 
    [MethodImpl(MethodImplOptions.InternalCall)] 
    get; 
} 

Это индексатор retieves полукокс из строки по индексу и ограничивает его сеттер (что делает его неизменен, я полагаю). Но как работает этот геттер? Где он берет символ с? И как автоматизатор отладки реализует этот гейтер индексатора?

+0

Возможно, http://stackoverflow.com/questions/12550749/what-is-the-dynamicallyinvokable-attribute-for помогает? –

+6

«Откуда убирает этот символ?» Когда вы видите 'MethodImplOptions.InternalCall', это означает, что« мы не собираемся вас показывать »(или более вежливо,« это собственная реализация, частная для компонента »). – dasblinkenlight

+0

InternalCall означает «реализовано в CLR» –

ответ

6

В description из MethodImplOptions.InternalCall состояний:

вызов является внутренним, то есть, он вызывает метод, который реализуется в общеязыковой среде выполнения.

Таким образом, как реализуется геттер зависит от выполнения, который вы используете (.NET 2.0, .NET 4.0, ...), реализация не является частью библиотеки, содержащей System.String.

Если вам интересно о том, как такой способ может быть реализован в C#, вы можете посмотреть на

+0

Это ссылка, которую я искал. Благодаря!!! – Alex

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