Есть ли какие-либо преимущества, связанные с возможностью использования частных методов расширения? Я не нашел для них никакой пользы. Было бы лучше, если бы C# не разрешал их вообще?Вы когда-нибудь использовали частные методы расширения?
ответ
Это полезно для улучшения синтаксиса кода в методе/класса, но вы не хотите, чтобы выставить функциональные возможности, предлагаемые этим методом расширения до другие области кодовой базы. Другими словами, в качестве альтернативы для обычных частных статических вспомогательных методов
Рассмотрим следующий пример:
public class MyClass
{
public void PerformAction(int i) { }
}
public static class MyExtensions
{
public static void DoItWith10(this MyClass myClass)
{
myClass.DoIt(10);
}
public static void DoItWith20(this MyClass myClass)
{
myClass.DoIt(20);
}
private static void DoIt(this MyClass myClass, int i)
{
myClass.PerformAction(i);
}
}
Я понимаю, что пример не имеет особого смысла в его нынешнем виде, но я уверен, что вы можете оценить возможности, что частные методы расширения обеспечивают, а именно способность имеют общедоступные методы расширения, которые используют частное расширение для инкапсуляции или композиции.
hm, я предполагаю, что мы не захотим менять MyClass, иначе вы могли бы использовать функцию DoIt как обычную функцию в MyClass. Но опять же, почему функция DoIt вообще, если DoItWith20 может вызвать сам PerformAction –
@ThanosPapathanasiou MyClass может быть кодом, к которому у вас нет доступа. например сторонняя сборка – Dolbz
@ThanosPapathanasiou: Я знаю, что этот пример идеален с логической точки зрения, но это было то, что я мог придумать в спешке. Однако это иллюстрирует, что частные методы расширения не бессмысленны. –
Я просто искал Google, потому что сомневался, что для них было много пользы. Это, однако, является прекрасным иллюстративным приложением для них:
http://odetocode.com/blogs/scott/archive/2009/10/05/private-extension-methods.aspx
- 1. Могут ли быть частные методы расширения?
- 2. Можете ли вы переопределить частные виртуальные методы?
- 3. предваряя частные методы и свойства
- 4. Частные методы в Xcode
- 5. Когда использовать частные методы?
- 6. Наследование, суперконструкторы и частные методы
- 7. Какие методы вы фактически использовали для улучшения покрытия кода?
- 8. Вы успешно использовали GPGPU?
- 9. Где вы использовали gSOAP?
- 10. Вы использовали Rhino Igloo?
- 11. JVM и частные методы
- 12. ruby - Файло-частные методы
- 13. Частные методы и поля
- 14. Сделать частные методы окончательными?
- 15. Частные методы в Рубине
- 16. Частные методы в Python
- 17. Частные методы в ObjC++
- 18. F # Частные статические методы
- 19. Динамически создавать частные методы в JavaScript
- 20. Когда объявлять методы расширения класса
- 21. Как вы тестируете частные методы, классы и модули?
- 22. Как вы тестируете частные методы с помощью NUnit?
- 23. Почему вы можете публиковать частные методы публично в службе WCF?
- 24. Понимание частные методы в Рубине
- 25. Частные методы появляются как общедоступные методы
- 26. частные кода за методы игнорируются компилятором - ASP.NET
- 27. Что вы использовали Object.clone() для?
- 28. Вы использовали API каталогов Google?
- 29. Вы когда-нибудь использовали CSLA?
- 30. Вы бы использовали Code Bubbles?
Я не совсем понял, что вы сказали, что первый раз, когда я его прочитал, в основном потому, что я стараюсь избегать больших вспомогательных классов, где имеет смысл статический класс-помощник, после того, как я подумал, что ваш ответ правильный. +1 –