Метод расширения и класс помощника
Возможный дубликат:
Методы расширения 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
- возможно, поместите их в какое-то общее пространство имен верхнего уровня для вашего приложения.