C# 我应该如何调用重载扩展方法?

C# 我应该如何调用重载扩展方法?,c#,overloading,extension-methods,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

假设我有这个扩展方法:

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"
}

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

这并不重要。基本上是一样的。将调用相同的方法,甚至IL也将是相同的,因为扩展方法


我在使用扩展方法时遇到的唯一主要问题是
dynamic
关键字:它不能解析扩展方法。在这种情况下,您应该始终使用
static
方法。既然您在这里没有这样做,那就没关系了。

这应该是一个意见问题,我个人会将扩展方法称为实例方法,这就是它们的主要调用方式。这是一个意见问题。如果调用
static
方法,为什么要使用扩展方法?@YuvalItzchakov-我希望能够调用obj.ToJson()和obj.ToJson(设置)作为对象的扩展方法。我不想复制逻辑,因此更愿意创建一个重载来调用另一个方法。我想知道哪种方法更好,因为这两种方法都会起作用。@YuvalItzchakov-在这种情况下,哪种方法更好有一个确定的答案。我没问EmberJS是否比AngularJS好。。我不知道它们都产生相同的IL代码。@YuvalItzchakov-我想大多数人不知道它们产生相同的IL代码。。