次のような拡張メソッドを持つ 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")
これは正常にコンパイルされますが、実行時に例外がスローされます。
タイプ 'SomethingB' のパブリック メンバー 'ExtensionMethod' が見つかりません。
VB.Net を変更して明示的に型をインターフェイスにする場合は、次のように動作します。
Dim something as ISomething = Me.SomethingManager.GetSomething(key)
Dim result = something.ExtensionMethod("extra")
なんで?拡張メソッドがインターフェイスでは機能するのに、それを実装するクラスでは機能しないのはなぜですか? サブクラスを使用した場合、同じ問題が発生しますか? VB.Net の拡張メソッドの実装は不完全ですか?
明示的なインターフェイスなしで VB.Net を機能させるために、C# ライブラリでできることはありますか?