特定の名前空間の下のアセンブリで宣言された拡張メソッドがあります。これは非常に一般的なヘルパーです。
using System;
namespace Common {
public static class GenericServiceProvider {
public static T GetService<T>(this IServiceProvider serviceProvider) {
return (T)serviceProvider.GetService(typeof(T));
}
}
}
別のアセンブリと名前空間で、IServiceProviderを実装するクラスからこの拡張メソッドにアクセスしようとしています。
using System;
using Common;
namespace OtherNamespace {
class Bar: IServiceProvider {
void Foo() {
GetService<IMyService>(); // doesn't compile
this.GetService<IMyService>(); // compiles
}
}
}
ご覧のとおり、ジェネリック拡張メソッドを直接呼び出すことはできません。IntelliSenseにも表示されません。ただし、呼び出しの前に「this」を追加すると、正常に機能します。
これは、.NET4を使用するVisualStudio2010にあります。
これは正常ですか、それとも私は何か間違ったことをしていますか?ありがとう。