Вот альтернативное решение (предпочитаемое мной):
(this as MyInterface).MyMethod("test");
Почему? - потому что решение, предоставленное ранее, не будет работать в тех случаях, когда метод расширения вызывает метод "new" класса(свойство тоже метод).В таких случаях вы можете намереваться вызвать метод расширения для типа, объявленного базовым классом / интерфейсом, который может вести себя иначе, чем производный класс / интерфейс.
Также это решение будетработать как с «новыми», так и с «переопределенными» методами, потому что виртуальное «переопределение» в любом случае вызовет производную версию, что также было бы предназначено.на самом деле не хочу передавать "base" в метод расширения и вместо этого позволить ему принять "this".Однако вы должны учитывать поведенческие различия.
Также интересно отметить в качестве ответа на комментарий Дарина Димитрова: методы расширения не требуют экземпляра для их запуска, потому что они статическиеметоды.Вы можете вызвать метод расширения как статический, передав ему параметры.Однако «base» не является допустимым значением параметра для параметра, отмеченного «this» в объявлении метода расширения, что (если бы я был MS) позволило бы упростить общее использование методов расширения.