2015-07-13 5 views
2

Предполагая, что у меня есть этот метод расширения:Как мне вызвать перегруженный метод расширения?

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

Это должно быть мнение, лично я бы назвал метод расширения как метод экземпляра *. Именно так они называются * в основном *. – Habib

+0

Это вопрос мнения. Если вы вызываете метод 'static', зачем вообще использовать метод расширения? –

+0

@YuvalItzchakov - Я хочу называть obj.ToJson() и obj.ToJson (настройки) как методы расширения на объекте. Я не хочу дублировать логику и поэтому предпочитаю создавать перегрузку, которая вызовет другой метод. Я хотел знать, какой путь лучше, поскольку оба пути будут работать. –

ответ

5

Это не имеет большого значения. Это в основном то же самое. Тот же метод будет вызываться, и даже IL будет таким же, поскольку методы расширения are a code feature, the result in the compiled code is the same.

Единственная серьезная проблема, с которой я столкнулся при использовании методов расширения, - это ключевое слово dynamic: оно не разрешает методы расширения. В этом случае вы всегда должны использовать метод static. Поскольку вы этого не делаете, это не имеет значения.

+0

Спасибо за ваш ответ. –

Смежные вопросы