2016-01-27 5 views
1

Я искал исходный код аудиозаписывающего устройства, и я заметил, что код очень часто использовал оператор -> в коде. Например:'->' оператор в C#, что он делает?

WaveInHeaders[i]->dwUser = IntPtr.Zero; 
WaveInHeaders[i]->lpNext = IntPtr.Zero; 
WaveInHeaders[i]->reserved = IntPtr.Zero; 

Я никогда не видел ничего подобного, что в C#, прежде чем он мне напоминает итератора C++, но я просто хочу, чтобы было ясно себе. Что это и что он делает? (он использовался в небезопасном классе)

+2

Поскольку этот код является «небезопасным», тогда '->' является детекцией. Проверьте это: http://stackoverflow.com/questions/6405212/does-c-sharp-use-the-pointer-notation – Ian

+0

@Ian: Спасибо. – Arrrr

ответ

4

Это оператор доступа к полю. Он позволяет вам получить доступ к полю структуры через указатель на эту структуру в неуправляемом коде. Все операторы, разрешенные для указателей, описаны в this document.

В этом случае WaveInHeaders представляет собой массив указателей на структуры. Каждая структура имеет (по крайней мере) три поля типа IntPtr - dwUser, lpNext и reserved.

+0

Итак, учитывая тот факт, что Structs неизменяемы в C#, это причина, по которой автор кода использует указатели таким образом, верно? Но что не так с использованием класса? – Arrrr

+3

Кто сказал, что структуры не меняются в C#? Лучше практиковать, чтобы ваши структуры были неизменными, и встроенные примитивные типы значений следуют этой практике, но вы также можете построить изменчивые структуры на C#. –

+0

@JoelCoehoorn: Но они, естественно, изменяемы как поведение по умолчанию? – Arrrr

1

Оператор -> используется для доступа к интерфейсу объекта через указатели.

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