Способ # расширение С и использование

GPS платформы, строительство сайта, разработка программного обеспечения, эксплуатация и техническое обслуживания системы, чтобы найти большую лесную технологию сети!
http://cnsendnet.taobao.com
от Sen науки и техники официальном блоге
http://www.cnsendblog.com/index.php/?p=476

Метод Extension позволяет «добавить» методы в существующие типы без создания нового производного типа, перекомпиляции или иного изменения исходного типа. Метод расширения представляет собой особый вид статический метод, но может быть вызван как метод экземпляра того же типа расширения. К ним относятся официальное описание MSDN сайт метода расширения, и теперь я должен объяснить это поведение на примере сцены. Предположим, что программа класса консольная программа {}, главная функция заключается в следующем:

статической силы основных (строка [] арг)
{
DateTime Теперь = DateTime.Now;
Строка времени = now.ToString ( "гггг-ММ-дд чч: мм: сс");
ЕЫпе (время);
Console.ReadKey ();
}

Предположим , что спрос изменился, формат отображения даты , чтобы стать «гггг-ММ-дд» формат, можно переписать в следующей редакции курс инициализируется только Время:
String = now.ToString Время ( «гггг-ММ-дд» ),
но если вы хотите изменить формат даты есть много , как это? Каждая из них должна быть снова изменена? После такого требования они меняют мнение людей слишком заняты. Традиционное решение для упаковки вспомогательного класса, в котором метод записи, а также для других типов вызовов.
Добавить имитируют согласно настоящему варианту осуществления в текущем классе проект DateHelper: открытый класс DateHelper {}, которая определена в методах класса:
открытые статические Строка dateToString (The DateTime дт)
{
вернуть dt.ToString ( "ММ-ДД-ГГГГ HH: MM: SS") ;
}
Таким образом, основная функция оригинала переписано следующим образом :

статической силы основных (строка [] арг)
{
DateTime Теперь = DateTime.Now;
Строка времени = DateHelper.DateToString (сейчас);
ЕЫпе (время);
Console.ReadKey ();
}

На данный момент , если изменение потребностей, то нужно всего лишь переписать DateHelp класса метода DateToString () на линии, независимо от того , сколько классов называют этот метод, будет затронуто. Решить эту проблему, но этот класс , чтобы вызвать другой метод, или немного хлопот, нет никакого способа , чтобы сделать нас , как now.DateToString () как прямой вызов его? Конечно, Microsoft будет DateTime написано, что мы не можем изменить, не может создать метод экземпляра вы хотите, так что это приводит к методам расширения.
Ниже приведен метод расширения элемента:
1. метод должен быть статический метод
2. Этот метод должен быть помещен в статическом классе
3. Первый параметр этого метода необходимо начинать с этим, и этот метод расширен , чтобы указать , какой тип из
больше элементов, мы изменили DateHelper класса статического класса: статический класс общественного DateHelper {}, в то время перезаписи dateToString () метод:
открытая статическая Строка dateToString (этого DateTime дт)
{
вернуть dt.ToString ( «мМ-дД-YYYY HH: мм: СС «);
}
. в этом случае способ возвращается к основной функции, его входной» сейчас «будет видны , чтобы иметь метод с dateToString автоматически быстрой (), и код могут быть записаны следующим образом:

статической силы основных (строка [] арг)
{
DateTime Теперь = DateTime.Now;
Строка времени = now.DateToString ();
ЕЫпе (время);
Console.ReadKey ();
}

Очевидно, что это будет более удобно использовать их, так что давайте посмотрим, как и быть метод экземпляра сам имеет тот же тип расширения, очень читаемый. Ниже кратко характеристики метода расширения:
1. Метод расширения , который простирается от типа, он должен быть этот тип переменной , чтобы использовать другие типы не могут быть использованы, в этом случае простирается от типа DateTime, он может быть только переменная типа DateTime из. (now.DateToString ())
параметр позади этого метода расширения 2. параметры метода не являются, в настоящем варианте осуществления нет параметра, последний задается в этом DateTime дт , простирающейся от метода какого типа
3. Если методы расширения и примеры методы имеют ту же сигнатуру, приоритет вызова метода экземпляра
4. метод расширения от родительского класса, объект может быть использован непосредственно подклассы
5. простирается от интерфейса, объект может быть непосредственно реализован класс
6. Окончательный метод расширения или компилятор в: статический метод класса статического (), в этом случае now.DateToString () в конечном итоге будет скомпилирован в DateHelper.DateToString (сейчас), что его суть
на самом деле, мы можем столкнуться с сценарии, такие как метод в расширении интерфейса времени, все уже класс , который реализует методы интерфейса должны достигнуть нового расширения, это изменение является очень Устали от работы, вы можете использовать методы расширения «Quxianjiuguo», а иногда мы хотим добавить новые методы класса этого класса не хотят изменения, то этот способ методов расширения «псевдо-добавил» подход будет отражать стоимость его , Наиболее распространенным методом является расширение стандартных операторов запроса LINQ, широкое использование этого удобного и эффективного способа для кода фермеров , которые должны выиграть 1024 баллов похвалить.

Что такое метод расширения?
  Метод расширения в буквальном смысле относится к способу расширения, и это соответствует объектно-ориентированному программированию шаблона относится к способу распространения класса. Согласно нашему обычному пониманию, мы в первую очередь необходимо получить исходный код для класса, а затем добавить член этого метода класса в коде, так что вы можете достичь цели обеспечения методы расширения для класса. Но , к сожалению, этот метод в исходном коде не так , вы не можете работать, и мы пошли , чтобы искусственно изменить исходный код может подорвать стабильность всего кода. Есть ли способ , чтобы обеспечить способ расширить класс без изменения исходного кода помещения его? Это метод расширения , мы хотим сказать сегодня, так что мы можем расширить метод , чтобы понять метод дает возможность расширить наружу без изменения исходного кода помещения. Методы расширения в C # для осуществления является относительно простой, например , как мы делаем в разработке игр Unity3D, она может быть использована DOTween этого плагина. Этот плагин ITween автора переписать анимационный плагин, ITween там , чем на эффективность значительно улучшена. Более важным моментом является то, что он использует методы расширения для достижения таким образом , что , когда мы называем эти API - интерфейс трудно чувствовать , что мы используем плагин, более , как с помощью Unity3D родной функции, поэтому , когда мы используем DOTween + uGUI это сочетание , когда сердце будет чувствовать себя очень комфортно, все встанет на свои места , как генерал.
Методы расширения Каковы характеристики?
  Метод расширения реализован в объектно-ориентированном программировании и нормальный такой же, другими словами, нам нужно только определить класс, а затем добавить соответствующий метод может быть реализован в нем. Но там , где есть три точки , чтобы отметить здесь Во- первых, методы расширения класса реализации должны быть независимыми от имени класса и статического класса и методы расширения для достижения класса;. Второй метод класса реализации методов расширения должен быть статический метод, третий, первый метод класса параметров реализации методов расширения должно быть определен с помощью этого метода ключевого слова для достижения расширения класса. Например, мы знаем , что законная строка преобразуется в тип целого, вы можете использовать int.Parse () метод, если мы хотим расширить метод ToInt для строкового типа должны быть , как это сделать? Вместе мы рассмотрим следующий код:

  1. /// <резюме>
  2. /// 1, определение статического класса
  3. /// 2, статическое имя класса и класс специфичного для достижения метод расширения не зависит
  4. /// </ резюме>
  5. общественный класс SomeClass статической
  6. {
  7. /// <резюме>
  8. /// 3, для достижения конкретных статического метода
  9. /// </ резюме>
  10. /// <парам имя = «ул»> 4, используя первый параметр должен использоваться, чтобы указать тип этого ключевого метода расширения </ PARAM>
  11. /// <возврат> </ возврат>
  12. открытые статические INT ToInt (эта строка строка)
  13. {
  14. Возвращение int.Parse (ул);
  15. }
  16. }
    Обратите внимание , что метод расширения C # поддерживает, чтобы начать с .NET3.5 версии, поэтому при написании метода расширения, убедитесь , что .NET версия отвечает этому требованию. Упомянутая версия, есть много друзей, особенно после того, как Unity5.0 начать обучение с Unity3D друзей, сообщение часто упоминается мой код не работает в новой среде и т.д. Точно так же вопрос в моем блоге, я думаю , что этот мир обновление было , несомненно , самый быстрый IT технологии, мы используем новую версию без проблем, но иногда из - за исторических вопросов , таких как развитие технологий и python2.7 python3, Unity4.X и Unity5.X, это может произойти , если версия проблемы несовместимости, на этот раз , если ресурсы в сети не в курс, предполагает , что вы проверить официальную документацию даты своевременно, потому что кажется , блоггеры связанных статей или книг по сети используются для обозначения древней поговорки: сделать письмо книги , как ни одна книга, только объективно, беспристрастно определить правильные знания или нет, мы можем узнать только действительно полезные знания.
      Ну, теперь после того, как мы закончили писать этот метод расширения, вы можете использовать методы расширения , такие как:
  17. Строка ул = "1234";
  18. INT = Вэл str.ToInt (),
    этот пример , чтобы показать вам , как написать метод расширения без аргументов, поэтому , когда нам нужно передать параметры в метод расширения , как это сделать? Нам просто нужно продолжать добавлять параметры в заявлении после первого аргумента достаточно. Например, мы часто должны координировать 3D - объект , расположенный в Unity3D , как правило , мы можем быть реализованы с помощью следующего кода:
    transform.position Vector3 новых новый = (1,1,1);
    Этот код является относительно простого до сих пор, но мы Unity3D знает , что в дополнении к позиции собственности есть localPosition собственность, если наш код снова участвует в координатном расчет, я считаю , что код будет очень долго. Более того, иногда мы просто хотим , чтобы изменить размер трехмерных координат, но мы должны дать трехмерную координатную transform.position, не удивительно, в это время код будет больше. Чтобы решить эту проблему, мы можем расширить три метода SetPositionX, SetPositionY, SetPositionZ соответственно , как х, у, г координата задания трех компонентов, мы продолжаем добавлять методы SomeClass этого класса:
  19. /// <резюме>
  20. /// установить координаты Х Tranform
  21. /// </ резюме>
  22. /// <парам имя = "Тран"> 当前 Transform </ PARAM>
  23. /// <парам имя = "х"> X 坐标 </ PARAM>
  24. государственной статической силы SetPositionX (это преобразование тран, поплавок х)
  25. {
  26. tran.position = новый Vector3 (х, tran.position.y, tran.position.z);
  27. }
  28. /// <резюме>
  29. /// набор Координата Tranform
  30. /// </ резюме>
  31. /// <парам имя = "Тран"> 当前 Transform </ PARAM>
  32. /// <парам имя = "х"> У 坐标 </ PARAM>
  33. государственной статической силы SetPositionY (это преобразование тран, поплавок у)
  34. {
  35. tran.position = новый Vector3 (tran.position.x, у, tran.position.z);
  36. }
  37. /// <резюме>
  38. /// установить Z координата Tranform
  39. /// </ резюме>
  40. /// <парам имя = "Тран"> 当前 Transform </ PARAM>
  41. /// <парам имя = "х"> Z 坐标 </ PARAM>
  42. государственной статической силы SetPositionZ (это преобразование тран, поплавок г)
  43. {
  44. tran.position = новый Vector3 (tran.position.x, tran.position.y, г);
  45. }
    Используя расширенные плюсы метода и недостатки
      методов расширения удобных для использования, поэтому мы здесь , чтобы обсудить плюсы и минусы использования более низкие методов расширения. Конечно, преимущество свободных и волевых методы расширения использования , чтобы расширить методы класса и расширения в визуальной интеллектуальных подсказках студии будет определенно синим стрелкой вниз. Даунсайд метод расширения смотреть на дизайн методы расширения люди могут лучше управлять этой функции, по сути, все методы , такие же, я часто слышу , как люди презирают Unity3D игровой движок в группе игры UnReal Engine4 Маунт - Рашмор двигатель мир, я признаю UE4 эффект хорошая картина, но может действительно сделать хорошее использование этого двигателя, сколько людей? При использовании методов расширения должны следовать принципу близости, то есть, использование методов расширения в наименьшей области видимости, методы расширения для достижения конкретного класса , а не абстрактный класс. Мы используем метод расширения просто потому , что он требует такой функции на логическом уровне, поэтому нам не нужно , чтобы изменить логический уровень абстракции, так как это весь код «загрязнение окружающей среды.» Возьмем простой пример, мы знаем , что базовый класс .NET является объектом, если мы расширим класс, нет никаких сомнений в том, что будет влиять на все унаследованные от класса объекта, который может вызвать «загрязнение», очевидно , не желательно а.
    Резюме
    • методы расширения класса реализации в C # должен быть статический класс и имя класса и реализация класса методов расширения не имеет никакого отношения к
    • класс способ расширить реализацию метода должен быть статический метод
    первого параметра • методы расширения метода класса реализации должны быть использовать это ключевое слово , чтобы указать класс реализации методов расширения
    • внедрить методы расширения должны соответствовать принципу близости, используйте методы расширения минимального диапазона для того , чтобы избежать «загрязнения»

GPS платформы, строительство сайта, разработка программного обеспечения, эксплуатация и техническое обслуживания системы, чтобы найти большую лесную технологию сети!
http://cnsendnet.taobao.com
от Sen науки и техники официальном блоге
http://www.cnsendblog.com/index.php/?p=476

рекомендация

отblog.51cto.com/14036626/2482943
рекомендация