假设我有这种扩展方法:
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"
}
我应该使用静态调用还是作为扩展名来调用重载?
答案 0 :(得分:5)
这并不重要。它基本上是一样的。将调用相同的方法,甚至IL也将是相同的,因为扩展方法are a code feature, the result in the compiled code is the same。
我使用扩展方法遇到的唯一主要问题是dynamic
关键字:它不解析扩展方法。在这种情况下,您应该始终使用static
方法。既然你不这么做,那就无所谓了。