¿Existe alguna ventaja de tener la opción de usar métodos de extensión privados? No he encontrado ningún uso para ellos en absoluto. ¿No sería mejor si C# no les permitía nada?¿Alguna vez ha usado métodos de extensión privados?
Respuesta
Esto es útil para mejorar la sintaxis de código dentro de un método/clase, pero no quiere exponer la funcionalidad ofrecida por ese método de extensión de otras áreas de la base de código. En otras palabras, como una alternativa para los métodos auxiliares estáticos privados regulares
considerar lo siguiente:
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);
}
}
que se dan cuenta que el ejemplo no tiene mucho sentido en su forma actual, pero estoy seguro de que se puede apreciar las posibilidades que ofrecen los métodos de extensión privados, es decir, la capacidad de tener métodos de extensión pública que usan la extensión privada para encapsulación o composición.
hm, supongo que no deseamos cambiar MyClass; de lo contrario, podría tener la función DoIt como una función normal en MyClass. Pero, de nuevo, ¿por qué el DoIt funciona en absoluto si DoItWith20 puede llamar a PerformAction en sí? –
@ThanosPapathanasiou MyClass podría ser un código al que no tiene acceso. p.ej. una asamblea de un tercero – Dolbz
@ThanosPapathanasiou: Sé que el ejemplo es perfecto desde el punto de vista de la lógica, pero fue lo que pude llegar con prisa. Sin embargo, ilustra que los métodos privados de extensión no son inútiles. –
Acabo de buscar en Google para investigar, ya que era dudoso que había mucho uso para ellos. Sin embargo, esto es una excelente aplicación ilustrativa para ellos:
http://odetocode.com/blogs/scott/archive/2009/10/05/private-extension-methods.aspx
- 1. ¿Alguna vez ha usado ngen.exe?
- 2. ¿Alguna vez ha usado PhantomReference en algún proyecto?
- 3. ¿Alguna vez ha usado el virtualizador de código o vmprotect para protegerlo de la ingeniería inversa?
- 4. ¿Alguna vez ha usado un algoritmo genético en aplicaciones del mundo real?
- 5. ¿Se ha usado alguna vez la "sustracción fingida" en el mundo real?
- 6. ¿Alguna vez OCaml ha copiado bloques personalizados?
- 7. ¿Alguna vez ha bloqueado el compilador?
- 8. ¿Alguna vez ha usado una "variable de instancia de clase" en cualquiera de sus códigos de Ruby?
- 9. Bloques vs métodos privados?
- 10. ¿Finalizar métodos privados?
- 11. Métodos privados y campos
- 12. F # Métodos estáticos privados
- 13. ¿Se ha admitido el selector :: - webkit-selection alguna vez?
- 14. Uso de métodos estáticos privados
- 15. ¿Alguien ha usado JS.Class y le ha gustado?
- 16. Método Interceptor en métodos privados
- 17. JavaDoc: campos y métodos privados
- 18. ¿Alguna vez ha salvado su tocino de propiedades triviales?
- 19. ¿Alguien ha usado SciPy con IronPython?
- 20. ¿Alguien ha usado HipHop para PHP?
- 21. ¿Alguien ha usado Jaxer en producción?
- 22. ¿Alguien ha usado Delphi para programar VST?
- 23. métodos de extensión estáticas
- 24. Ventajas de usar métodos estáticos privados
- 25. ¿Alguna vez Scala (o JVM) ha optimizado objetos (Function)?
- 26. ¿Alguna vez ha diseñado software imaginando la solución ideal?
- 27. ¿Alguna vez ha obtenido el archivo jquery vsdoc para trabajar con Visual Studio?
- 28. ¿Algún programa ha usado .DS_Store (o similar) para algo útil?
- 29. Métodos privados en una clase de Mootools
- 30. Pruebas unitarias de métodos privados en Xcode
No entendí qué dijiste la primera vez que lo leí, sobre todo porque tiendo a evitar las clases de ayuda grande donde una clase privada de ayuda estática tendría sentido, después de pensar un poco creo que tu respuesta es correcta. +1 –