Почему 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")

Это компилируется нормально, но выдает исключение во время выполнения:

Публичный член 'ExtensionMethod' для типа 'SomethingB' не найден.

Если VB.Net изменен, чтобы явно сделать тип интерфейсом, он работает:

Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")

Почему? Почему метод расширения работает с интерфейсом, но не с классом, который его реализует? Была бы у меня такая же проблема, если бы я использовал подкласс? Является ли реализация VB.Net методов расширения неполной?

Можно ли что-нибудь сделать в библиотеке C#, чтобы VB.Net работал без явного интерфейса?

5
задан Keith 31 May 2012 в 08:41
поделиться