可能重複:
Why is the 'this' keyword required to call an extension method from within the extended class擴展方法需要「this」來調用?
我有一定的命名空間下宣佈在裝配的擴展方法,這是一個很常見的幫手:
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」,它可以正常工作。
這是在Visual Studio 2010中使用.NET 4
這是正常的還是我做錯了什麼?謝謝。
這是呼籲「同一類」擴展方法的正常方式我。在一分鐘內有人給你一個更好/更完整的答案:)。 – nemesv
你** p Robabbly **有一些ambiguos定義另一種方法。 – Tigran
這裏有一個類似的問題:http://stackoverflow.com/a/3513036/1174069 – pjumble