Как правильно писать расширения в общем? - PullRequest
2 голосов
/ 23 июля 2011

Я видел примеры написания расширений классов для дженериков несколькими способами. Я собираюсь использовать AutoMapper в качестве примера.

1)

public static class Extensions<Src, Tgt>
{
    public static Tgt TransferData(this Src source)
    {
        AutoMapper.Mapper.CreateMap<Src, Tgt>();
        return AutoMapper.Mapper.Map<Src, Tgt>(source);
    }
}

2)

public static class Extensions2
{
    public static Tgt TransferData<Src, Tgt>(this Src source)
    {
        AutoMapper.Mapper.CreateMap<Src, Tgt>();
        return AutoMapper.Mapper.Map<Src, Tgt>(source);
    }
}

Что лучше? Зачем? Первый даже правильный?

1 Ответ

7 голосов
/ 23 июля 2011

Нет, первое неверно. Методы расширения должны быть определены в статическом неуниверсальном классе верхнего уровня.

Кроме того, я бы посоветовал соблюдать правила именования и для параметров типа:

public static class Extensions2
{
    public static TTarget TransferData<TSource, TTarget>(this TSource source)
    {
        AutoMapper.Mapper.CreateMap<TSource, TTarget>();
        return AutoMapper.Mapper.Map<TSource, TTarget>(source);
    }
}
...