Дополнительное разрешение метода

Взаимное исключение является взаимоисключающим флагом. Это действует как контролер к разделу кода, позволяющего одному потоку войти и блокирующего доступ ко всем другим. Это гарантирует, что код, которым управляют, будет только поражен единственным потоком за один раз. Просто обязательно выпустите взаимное исключение, когда Вы будете сделаны.:)

7
задан Joan Venge 15 July 2009 в 18:26
поделиться

2 ответа

Методы экземпляра имеют приоритет над методами расширения. Ваше наблюдение является доказательством того же.

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

Подробно перефразировано из C #,

Когда компилятор видит, что вы пытаясь вызвать метод, который выглядит как метод экземпляра, но не может чтобы найти его, он ищет методы расширения (которые видны на основе ваших с использованием директив ) . В случай нескольких кандидатов в качестве целевой метод расширения, тот, у которого "лучшая конверсия" похожа на перегрузка (например, если IChild и IBase оба имеют аналогичный метод расширения определено .. IChild.ExtensionMethod is selected)

Также может быть скрытый взломщик кода, допустим, TypeA не имеет SecretMethod в качестве метода экземпляра в Libv1.0. Итак, вы пишете метод расширения SecretMethod. Если автор вводит метод экземпляра с таким же именем и сигнатурой в v2.0 (без параметра this ), и вы перекомпилируете свой исходный код с последней n-лучшей версией Libv2. 0, все существующие вызовы метода расширения теперь будут автоматически перенаправляться на новый метод экземпляра .

9
ответ дан 6 December 2019 в 23:12
поделиться

Это правильное поведение. Причина в том, что введение метода расширения не должно изменять способ выполнения существующего кода. Код должен вести себя точно так же с этим «лишним» методом расширения или без него. В некоторых случаях (например, в вашем) это может показаться нелогичным, но на это есть причина.

Код должен вести себя точно так же с этим «лишним» методом расширения или без него. В некоторых случаях (например, в вашем) это может показаться нелогичным, но на это есть причина.

Код должен вести себя точно так же с этим «лишним» методом расширения или без него. В некоторых случаях (например, в вашем) это может показаться нелогичным, но на это есть причина.

2
ответ дан 6 December 2019 в 23:12
поделиться