Tengo una clase estática con un constructor estático que toma algún tiempo (10-15 segundos) para ejecutar e inicializar completamente la clase. Para mejorar el rendimiento, he decidido permitir que esta clase estática se inicialice explícitamente en lugar de cuando se necesita por primera vez para que esté lista cuando realmente se necesite.¿Cómo inicializar una clase estática de C# antes de que realmente se necesite?
Mi primera idea era crear un método Initialize()
para la clase, pero como ya tengo un constructor estático, no parece que este método tenga que hacer nada más que ser el método a llamar para inicializar explícitamente la clase sin acceder a cualquiera de sus otros métodos o propiedades públicas. Tener un método que no hace nada directamente no me parece correcto.
Luego pensé que podía mover el código del constructor estático a este método Initialize()
, pero también me gustaría que la clase se inicialice cuando se necesita por primera vez y el método Initialize()
no se llamó explícitamente.
En resumen, quiero que se deben observar los siguientes criterios:
- Quiero permitir la clase estática para inicializar explícitamente (probablemente mediante el uso de un método público
Initialize()
). - No quiero tener que acceder a ningún otro método público o propiedades en la clase cuando no los necesite, aunque esto inicializaría la clase estática.
- Si la clase no se ha inicializado explícitamente, aún quiero inicializarla cuando se necesita por primera vez (es decir, cuando se accede a otros métodos o propiedades públicas con la intención de utilizar la funcionalidad o los datos que proporcionan).
- Esta es una clase auxiliar y el uso del patrón de diseño Singleton no es necesario para mis propósitos.
¿Cuál sería la forma correcta de observar los criterios anteriores para una clase estática escrita en C#? Esto también se puede aplicar a otros lenguajes de programación (por ejemplo, Java), pero personalmente estoy interesado en una solución escrita en C#.
Por qué no inicializar la clase en el constructor estático? Creo que su deseo de poder inicializar manualmente es innecesario. – ChaosPandion
http://msdn.microsoft.com/en-us/library/bb397680.aspx – Venki
¿No es una clase estática "inicializable" * no * una clase estática? ¿Cuál sería el propósito de este tipo de comportamiento? Parece que desea instanciar una clase basada en valores estáticos en su lugar. –