У меня есть библиотека 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")
Это компилируется нормально, но выдает исключение во время выполнения:
Публичный член 'ExtensionMethod' для типа 'SomethingB' не найден.
Если VB.Net изменен, чтобы явно сделать тип интерфейсом, он работает:
Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
Почему? Почему метод расширения работает с интерфейсом, но не с классом, который его реализует? Была бы у меня такая же проблема, если бы я использовал подкласс? Является ли реализация VB.Net методов расширения неполной?
Можно ли что-нибудь сделать в библиотеке C#, чтобы VB.Net работал без явного интерфейса?