Метод расширения по-прежнему является статическим методом. Вы можете использовать его точно так же, как и обычный статический метод.
Единственное отличие состоит в том, что метод расширения позволяет использовать метод таким образом, что выглядит, как будто это часть типа, так что вы можете написать:
int result = stringValue.BMethod();
Вместо:
int result = BClass.BMethod(stringValue);
Это работает исключительно как компиляционный «трюк» - компилятор видит первую форму, и если BClass
можно использовать (он имеет надлежащее using
и находится в ссылочной сборке), то он превратит его в IL-код второго метода для вы. Это просто удобство.
Что предлагается?
Это действительно зависит. Если вы будете управлять типом, я бы рекомендовал поместить методы в этот тип. Это, как правило, более удобно.
Если вы не контролируете тип или пытаетесь «расширить» общий тип (например, IEnumerable<T>
), то методы расширения могут быть разумным.
Однако, если тип является очень распространенным типом, я обычно избегаю методов расширения, поскольку они становятся «шумом» в intellisense, что, в свою очередь, может вызвать дополнительную путаницу. Например, я лично не рекомендовал бы добавлять методы расширения на System.Object
или System.String
и т. Д.
Очень хорошо сказано (как всегда), Рид. +1 – Brian