Я хотел бы знать, основан ли дополнительный метод C# на каком-либо существующем шаблоне разработки.
Узор дизайна - это просто известная парадигма, то есть «Когда вы хотите достичь X, Do Y». Хорошо известная парадигма на объектно-ориентированных языках, таких как C # - «Когда вы хотите действовать в состоянии объекта, вызовите метод в этом случае».
Однако, до того, как были созданы методы расширения, вы не сможете вызвать свой собственный метод на экземпляре объекта, который вы не сможете добавить реализацию (например, интерфейсы, потому что они не могут иметь реализации или классы библиотеки, потому что они уже скомпилированы) Отказ Методы расширения заполняют этот разрыв, позволяя вам сделать методы, которые появляются , которые могут быть подходящими в экземплярах объектов, при этом именно его определены для реализации объекта.
Итак, да, возможно, методы расширения основаны на этой очень простой структуре дизайна, изготовления методов, которые действуют на состояние объекта, кажутся Callable из экземпляра его.
Методы расширения можно рассматривать как замену Visitor Pattern. Предлагается также использовать их в качестве адаптеров .
В общих языках происходит эволюция, в результате которой необходимость в шаблонах дизайна уменьшается. Например, есть цитата, что Lisp не нуждается в шаблонах дизайна, так как все построено на языке. Так что правильным будет вопрос, какие шаблоны дизайна заменяют методы расширения?
.Они не основаны на существующей структуре дизайна. Когда эта «функция» была впервые введена в Delphi, под названием «помощники класса» , Борланд даже предупредил пользователей от них. Они считались немного взлома , но теперь пыль урегулировала, они нашли свое место.
Как и все остальное, используйте при необходимости.
Нет, но методы расширения отлично подходят для реализации определенных шаблонов дизайна GoF (например, Прототипа).
Выпугивают символы один за другим и поддерживайте запись предыдущего символа. Если текущий символ - это пространство, а последний символ представляет собой пространство, вещи
.
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- Нет, они не являются, потому что они только синтаксический сахар.
Наиболее близким каноническим образцом дизайна, вероятно, является образец декоратора .
Если Balsamic Mockups уже используется для прототипов, следует рассмотреть Napkee . Цитируем веб-сайт «Napkee позволяет экспортировать макеты Balsamiq в HTML/CSS/JS и Adobe Flex 3 нажатием кнопки».
-121--774229-No. Это просто языковая особенность.
-121--3057647-Конечно, можно использовать методы расширения C #, если требуется реализовать определенные узоры проектирования. Например, смоделировать смеси в C #.
Я бы не отметил методы расширения, как любой из общих шаблонов дизайна, но его можно использовать для реализации табло, таких как, декоратор и адаптер и т. Д.