методы Расширения c# - шаблоны разработки

Я хотел бы знать, основан ли дополнительный метод C# на каком-либо существующем шаблоне разработки.

10
задан user 8 May 2012 в 13:57
поделиться

9 ответов

Узор дизайна - это просто известная парадигма, то есть «Когда вы хотите достичь X, Do Y». Хорошо известная парадигма на объектно-ориентированных языках, таких как C # - «Когда вы хотите действовать в состоянии объекта, вызовите метод в этом случае».

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

Итак, да, возможно, методы расширения основаны на этой очень простой структуре дизайна, изготовления методов, которые действуют на состояние объекта, кажутся Callable из экземпляра его.

11
ответ дан 3 December 2019 в 15:06
поделиться

Методы расширения можно рассматривать как замену Visitor Pattern. Предлагается также использовать их в качестве адаптеров .

В общих языках происходит эволюция, в результате которой необходимость в шаблонах дизайна уменьшается. Например, есть цитата, что Lisp не нуждается в шаблонах дизайна, так как все построено на языке. Так что правильным будет вопрос, какие шаблоны дизайна заменяют методы расширения?

.
8
ответ дан 3 December 2019 в 15:06
поделиться

Нет. Это просто языковая особенность.

5
ответ дан 3 December 2019 в 15:06
поделиться

Они не основаны на существующей структуре дизайна. Когда эта «функция» была впервые введена в Delphi, под названием «помощники класса» , Борланд даже предупредил пользователей от них. Они считались немного взлома , но теперь пыль урегулировала, они нашли свое место.

Как и все остальное, используйте при необходимости.

2
ответ дан 3 December 2019 в 15:06
поделиться

Нет, но методы расширения отлично подходят для реализации определенных шаблонов дизайна GoF (например, Прототипа).

1
ответ дан 3 December 2019 в 15:06
поделиться

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

CREATE FUNCTION [dbo].[fnRemoveExtraSpaces]  (@Number AS varchar(1000))
Returns Varchar(1000)
As
Begin
Declare @n int  -- Length of counter
Declare @old char(1)

Set @n = 1
--Begin Loop of field value
While @n <=Len (@Number)
    BEGIN
     If Substring(@Number, @n, 1) = ' ' AND @old = ' '
      BEGIN
        Select @Number = Stuff( @Number , @n , 1 , '' )
      END
     Else
      BEGIN
       SET @old = Substring(@Number, @n, 1)
       Set @n = @n + 1
      END
    END
Return @number
END
GO


select [dbo].[fnRemoveExtraSpaces]('xxx     xxx     xxx    xxx')
-121--1513182-

Нет, они не являются, потому что они только синтаксический сахар.

1
ответ дан 3 December 2019 в 15:06
поделиться

Наиболее близким каноническим образцом дизайна, вероятно, является образец декоратора .

2
ответ дан 3 December 2019 в 15:06
поделиться

Если Balsamic Mockups уже используется для прототипов, следует рассмотреть Napkee . Цитируем веб-сайт «Napkee позволяет экспортировать макеты Balsamiq в HTML/CSS/JS и Adobe Flex 3 нажатием кнопки».

-121--774229-

No. Это просто языковая особенность.

-121--3057647-

Конечно, можно использовать методы расширения C #, если требуется реализовать определенные узоры проектирования. Например, смоделировать смеси в C #.

0
ответ дан 3 December 2019 в 15:06
поделиться

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

0
ответ дан 3 December 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: