Поскольку DoSomething
принимает параметр.
DoSomething(a)
будет допустимым.
Редактировать
Я немного неправильно прочитал вопросздесь.
Поскольку вы вызываете его как обычный статический метод, а не метод расширения, вам необходимо использовать префикс с именем класса.
Так что A_Ext.DoSomething(a);
будет работать.
Если вы называете его как обычный статический метод, применяются все те же правила.
Ваш второй вариант работает, потому что B наследует A, и, следовательно, вы все равно в конечном итоге вызываете его как метод расширения, а третий не делает.
извините за первую версию выше, которая не работает.Я оставлю это, чтобы оставить комментарий актуальным.