Так работают методы расширения в спецификации языка C #.Если вы читаете раздел «7.6.5.2 Вызовы методов расширения», то в основном говорится, что вы должны вызывать метод одной из следующих форм:
expr . identifier ( )
expr . identifier ( args )
expr . identifier < typeargs > ( )
expr . identifier < typeargs > ( args )
Если вы заметили, expr
равно требуется для поиска метода расширения в качестве опции.
В этом случае this.
становится expr.
выше, так что вышеупомянутое может быть преобразовано в вызов статического метода для типа, где это метод расширения, определенный как:
C . indentifier ( expr , args )
В вашем случае, чтобы компилятор "нашел" (или даже нашел) вызов метода, вам нужно указать некоторый тип "expr".Явное this.
квалифицируется.Это заставляет компилятор принять следующее:
this.SetErrorMessage(message);
И найти подходящий метод расширения, который работает с типом, переведя его в:
HaveErrorExtensions.SetErrorMessage(this, message);