Метод расширения и класс помощника

Возможный дубликат:
Методы расширения vs Static Utility Class

Я создаю API общих функций, которые выполняют действия на основе объектов в .NET. Например; Я создал функцию, которая проверяет строку, чтобы узнать, является ли это адресом электронной почты.

Я мог бы либо:

static bool IsEmailAddress(string text)
{
    return IsMail(text);
}

или я мог бы создать метод расширения, который будет использоваться следующим образом:

string text = "[email protected]";
if (text.IsEmailAddress())
{
}

который более подходит, или вы думаете, так как это библиотека общего назначения, я мог бы технически реализовать ее в обоих направлениях и позволить разработчику решить, что лучше для них?

Ответ 1

Создание метода расширения означает, что он будет автоматически отображаться во время intellisense, когда пользователь использует этот тип. Вы должны быть осторожны, не добавляя много шума в список методов, которые просматривают разработчики (особенно при создании многоразовой системы). Например, когда эти методы просто используются в определенном контексте, вероятно, вам лучше использовать "обычные" статические методы. Особенно при реализации методов расширения для общих типов, таких как string.

Возьмем, например, метод расширения ToXml(this string) или методы расширения ToInt(this string). Хотя представляется довольно удобным использование этих методов расширения, преобразование текста в XML не является чем-то, что вы будете делать во всем приложении, и было бы так же легко сделать XmlHelper.ToXml(someString).

Хуже всего одно, и это добавление метода расширения на object.

Если вы пишете многоразовую структуру,

Ответ 2

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

Ответ 3

Вопрос в какой платформе .NET Framework вы будете нацелены? Если < 3.5, то методы расширения недоступны. В противном случае, зачем вам создавать новый класс?

Ответ 4

Метод расширения автоматически входит в состав статического класса. Это означает, что потребитель может использовать либо методы расширения, либо вызвать статический метод из класса, если он этого захочет. Я использую методы расширения столько, сколько могу, их легче обнаружить, если они помещены в правильное пространство имен.

Ответ 5

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