我无法让C#编译器调用我创建的扩展方法,因为它更喜欢使用带有的实例方法 params
相反的论点。
例如,假设我有以下类及其方法:
public class C
{
public void Trace(string format, params object[] args)
{
Console.WriteLine("Called instance method.");
}
}
并且扩展:
public static class CExtensions
{
public void Trace(this C @this, string category, string message, params Tuple<string, decimal>[] indicators)
{
Console.WriteLine("Called extension method.");
}
}
在我的示例程序中:
public void Main()
{
var c = new C();
c.Trace("Message");
c.Trace("Message: {0}", "foo");
c.Trace("Category", "Message", new KeyValuePair<string, decimal>("key", 123));
}
所有电话打印 Called instance method.
。
我无法上课 C
显然,或者我不打算创建扩展方法,我的扩展很重要,因为它允许我的用户继续使用他们已经知道的具有一些附加值的类。
根据我的理解,编译器将支持实例方法而不是扩展方法,但这是唯一的规则吗?这意味着任何具有类似方法的类 Method(string format, params object[] args)
不能有第一个参数类型的扩展方法 string
。
对此行为的原因或解决方法的任何解释(即 不 “干脆打电话 CExtensions.Trace(c, "Category", ...
“)将不胜感激。