Как сгруппировать методы расширения? - PullRequest
5 голосов
/ 02 марта 2011

У меня есть статический класс с кучей методов расширения для различных типов. Есть ли какая-либо утилита или способ разбить ее на несколько классов - отдельный класс для каждого целевого типа.

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

Поместить различные методы расширения в разные классы - это хорошая идея с точки зрения «чистого кода», но основная «группировка» методов расширения происходит путем помещения их в разные пространства имен.Причина в том, что методы расширения становятся доступными путем «использования» соответствующего пространства имен.

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

Вот ссылка на некоторые лучшие практики:

http://blogs.msdn.com/b/vbteam/archive/2007/03/10/extension-methods-best-practices-extension-methods-part-6.aspx

0 голосов
/ 09 сентября 2016

У меня есть другой способ группировки:

public class StringComplexManager
{
    public StringComplexManager(String value)
    {
        Value = value;
    }

    public String Value { get; set; }
}

public static class StringComplexExtensions
{
    public static StringComplexManager ComplexOperations(this String value)
    {
        return new StringComplexManager(value);
    }

    public static int GetDoubleLength(this StringComplexManager stringComplexManager)
    {
         return stringComplexManager.Value.Length * 2;
    }
}

Использование:

string a = "Hello"
a.ComplexOperations().GetDoubleLength()

ComplexOperation() группирует методы расширения и сужает область действия intellisense, так что если у вас изначально были сотни методов расширения строки, теперь вы видите только один в intellisense.

...