Почему VB.Net не может найти метод расширения интерфейса?
У меня есть библиотека C #, которая имеет метод расширения, что-то вроде:
public interface ISomething { ... }
public class SomethingA : ISomething { ... }
public class SomethingB : ISomething { ... }
public static class SomethingExtensions
{
public static int ExtensionMethod(this ISomething input, string extra)
{
}
}
Расширение отлично работает, если вызывается из C #, но имеет проблему, если вызывается из внешнего приложения VB.Net:
Dim something = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
Это прекрасно компилируется, но выдает исключение во время выполнения:
Public member 'ExtensionMethod' on type 'SomethingB' not found.
Если VB.Net изменяется, чтобы явно сделать тип интерфейсом, на котором он работает:
Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
Зачем? Почему метод расширения работает с интерфейсом, а не с классом, который его реализует? У меня была бы та же самая проблема, если бы я использовал подкласс? Является ли реализация расширенных методов в VB.Net неполной?
Что я могу сделать в библиотеке C #, чтобы VB.Net работал без явного интерфейса?