所以在工作中,我使用了一個我們沒有寫的API,其中一個方法接受了一個委託。出於某種原因,這個想法在我看來,我有一個符合該簽名的擴展方法,所以我想知道它是否會起作用。我確信它不會讓我驚訝,它確實如此。請允許我以證明:將擴展方法傳遞給期望委託的方法。這個怎麼用?
說我有這些類:
public interface IMyInterface
{
}
public class MyClass : IMyInterface
{
}
public static class Extensions
{
public static string FuncMethod(this IMyInterface imy, int x)
{
return x.ToString();
}
}
現在讓我們說我有一個方法簽名的地方,看起來像這樣:
private static void Method(Func<int, string> func)
{
}
現在我的擴展方法(看起來像它)匹配的簽名,但我們都知道,擴展方法只是煙霧和鏡子,所以它真的不符合該簽名。然而,我可以安全地做到這一點:
var instance = new MyClass();
Method(instance.FuncMethod);
我的問題是,這是如何工作的?編譯器爲我做出什麼讓這可以接受。擴展方法的實際簽名需要IMyInterface
的實例,但Func
不適用於幕後的情況。