Me pregunto si puedo usar el método de extensión u otras técnicas para extender la clase estática como System.Net.Mime.MediaTypeNames.Image
, tiene menos tipo de lo que necesito.método de extensión para extender la clase estática
Respuesta
No, los métodos de extensión solo se pueden usar para agregar métodos de instancia, no métodos estáticos (o incluso propiedades). Los métodos de extensión son realmente solo azúcar sintáctico alrededor de métodos estáticos. Por ejemplo, cuando se utiliza un método de extensión como Count():
var list = GetList();
var size = list.Count();
Esto es en realidad compilado para:
var list = GetList();
var size = Enumerable.Count(list);
No se puede agregar métodos estáticos adicionales para una clase existente utilizando métodos de extensión .
¿Es correcto decir que "los métodos de extensión solo se pueden usar para agregar métodos de instancia"? Como explicas, solo dan la apariencia de ser métodos de instancia. En realidad, no son métodos de instancia, o podría acceder a miembros no públicos de la clase. –
No, esto aún no es posible en C#, aunque con suerte lo será en algún momento. Y no puede subclasificar una clase estática y agregar nuevos métodos de esa manera, ya que las clases estáticas deben derivar de object
. Sin embargo, una cosa que puedes hacer, que produce un efecto bastante similar en tu código, es simplemente declarar otra clase estática que utilizarás cuando quieras tus métodos de extensión. Por ejemplo:
public static class MessageBox2
{
public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs)
{
return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Desde la clase original es estático, por definición, el método de la "extensión" no necesita recibir una instancia como un parámetro this
, y simplemente se pueden utilizar métodos estáticos de la clase original.
- 1. ¿Métodos de extensión en una clase estática?
- 2. Diferencia de nivel bajo: clase no estática con método estático vs. clase estática con método estático
- 3. extender la clase DOP
- 4. ¿Extender la clase Enumerable en C#?
- 5. ¿Puedo agregar métodos de extensión a una clase estática existente?
- 6. String.IsNullOrBlank Método de extensión
- 7. Cómo usar call_user_func para el método de clase estática?
- 8. ¿Cuál es la mejor manera de duplicar/extender la funcionalidad de una clase estática?
- 9. Método de clase global vs función vs clase estática
- 10. Prueba de una clase con una dependencia clase estática/método
- 11. Método principal en una clase interna estática.
- 12. método de extensión se debe definir en no genérico clase estática
- 13. Cuál es la forma correcta para extender un método de la clase padre en Python moderna
- 14. Cómo extender la clase css
- 15. Extender la clase Singleton abstracta
- 16. ¿Cómo puedo extender la clase de imagen?
- 17. FormatProvider vs. método de extensión contra la nueva clase
- 18. Método estático de una clase estática frente a un método estático de una clase no estática (C#)
- 19. método de extensión para un método C#
- 20. Método de extensión para Enumerable.Intersperse?
- 21. ¿Es legal extender la clase Class?
- 22. ¿Cuándo ocurre la inicialización de clase estática?
- 23. ¿Cómo extender la clase Object en Rails?
- 24. AS3: llamar a un método de clase estática - los nombres de clase y método son cadenas
- 25. Clase dinámica extender
- 26. ¿Por qué extender la clase de excepción?
- 27. Señal de envío del método de clase estática en Qt
- 28. Método de formulario de acceso de otra clase estática
- 29. ¿Cómo se escribe un método de extensión C# para una clase genéricamente escrita
- 30. método de extensión llamar a otro en la misma clase de extensión - ¿buen diseño?
No puede extender clases estáticas; busca SO para los duplicados de esta pregunta y verás algunas soluciones. – BeemerGuy
¿Por qué necesitarías eso alguna vez? La clase estática no tiene contexto, y lo que sea que pueda dentro de una clase estática podría hacerse en "cualquier otro lugar" en el código. –
@Amby - Creo que es posible que desee hacerlo únicamente para propósitos organizativos. Claro que puedes crear una clase estática de ImageUtility con los métodos necesarios (que, de acuerdo con esta respuesta, tendrá que hacer de todos modos), pero creo que al OP le gustaría organizar su código de una manera que no necesite la clase adicional . Desafortunadamente, no puedes. (Vine aquí buscando hacer lo mismo). – MattW