我该如何调用重载的扩展方法?

时间:2015-07-13 15:00:53

标签: c# overloading extension-methods

假设我有这种扩展方法:

public static string ToJson(this object value, JsonSerializerSettings settings)
{
    return JsonConvert.SerializeObject(value, settings);
}

过载:

private static readonly JsonSerializerSettings settings = GetTheSettingsSomeWay();
public static string ToJson(this object value)
{
    return ToJson(value, settings); // (1) static call
    return value.ToJson(settings); // (2) using an extension on "this"
}

我应该使用静态调用还是作为扩展名来调用重载?

1 个答案:

答案 0 :(得分:5)

这并不重要。它基本上是一样的。将调用相同的方法,甚至IL也将是相同的,因为扩展方法are a code feature, the result in the compiled code is the same

我使用扩展方法遇到的唯一主要问题是dynamic关键字:它不解析扩展方法。在这种情况下,您应该始终使用static方法。既然你不这么做,那就无所谓了。