estoy leyendo un código en C# que utiliza dos constructores. Uno es estático y el otro es público. ¿Cuál es la diferencia entre estos dos constructores? ¿Y para qué tenemos que usar constructores estáticos?constructor público y constructor estático
Respuesta
static
y public
son conceptos ortogonales (es decir, no tienen nada que ver el uno con el otro).
public
simplemente significa que los usuarios de la clase pueden llamar a ese constructor (a diferencia de, digamos, private
).
static
significa que el método (en este caso, el constructor) pertenece no a una instancia de una clase sino a la "clase misma". En particular, un constructor estático se llama una vez, automáticamente, cuando la clase se utiliza por primera vez.
Además, un constructor estático no se puede hacer public
o private
ya que no se puede llamar manualmente; solo lo llama el tiempo de ejecución .NET, por lo que marcarlo como public
no sería significativo.
estático Constructor ... Está garantizado para ser llamado "una vez" througout la vida de la aplicación/aplicación de dominio. Puede contener declaraciones que desea que se ejecuten solo una vez.
constructor público ... Ya que no podemos añadir modificadores de acceso a un constructor estático, un constructor público significa que usted está hablando acerca de un constructor de instancias. Si un constructor de instancia es público, el mundo exterior puede crear sus instancias. Otras opciones son internas (se pueden llamar desde la biblioteca), privadas (solo desde la clase).
constructor estático se ejecuta sólo una vez, antes de que se crea una instancia de su clase. Se usa si quieres que algo suceda solo una vez. Un buen ejemplo sería una clase de Bus (similar a algo que ellos explican en MSDN article):
public class Bus
{
public static int busNo = 0;
static Bus()
{
Console.WriteLine("Woey, it's a new day! Drivers are starting to work.");
}
public Bus()
{
busNo++;
Console.WriteLine("Bus #{0} goes from the depot.", busNo);
}
}
class Program
{
static void Main(string[] args)
{
Bus busOne = new Bus();
Bus busTwo = new Bus();
}
// Output:
// Woey, it's a new day! Drivers are starting to work.
// Bus #1 goes from the depot.
// Bus #2 goes from the depot.
}
me gusta debido a la clara primera línea: simple y sin complicaciones! –
estático Constructor
Un constructor declara usando modificador static es un constructor estático. Un constructor estático se usa para inicializar datos estáticos o para realizar una acción particular que debe realizarse solo una vez en el ciclo de vida de la clase. El constructor estático es el primer bloque de código para ejecutar en clase. El constructor estático se ejecuta solo una vez en el ciclo de vida de la clase. Se llama automáticamente. El constructor estático no toma ningún parámetro. No tiene especificadores de acceso. No se llama directamente.
Instancia o Constructor Público
Instancia constructor se utiliza para inicializar los datos de instancia. Se llama al constructor de instancias cada vez que se crea un objeto de clase. Se llama explícitamente. Instance constructor toma los parámetros. Tiene especificadores de acceso.
- 1. Constructor estático y excepciones
- 2. constructor estático en C#
- 3. Constructor estático en VB.NET
- 4. C# Genérico estático Constructor
- 5. "público estático" o "público estático"?
- 6. Excepción en el constructor estático
- 7. Llamar explícitamente al constructor estático
- 8. ¿Constructor estático llamado después del constructor de la instancia?
- 9. diferencia entre público y público estático?
- 10. Copy Constructor y constructor predeterminado
- 11. RVO/NRVO y el constructor público de copia no definida
- 12. ¿Cómo puedo ejecutar un constructor estático?
- 13. Constructor estático para todo el conjunto
- 14. ¿Cómo invoco un constructor estático con reflejo?
- 15. equivalente constructor estático en Objective-C?
- 16. Código de constructor estático funciona más lento
- 17. Condición de carrera en C# constructor estático
- 18. Implementación Singleton con el constructor estático vacío
- 19. ¿Hay un constructor estático o un inicializador estático en Python?
- 20. Acceso al método estático al constructor no estático?
- 21. rendimiento constructor estático y por qué no podemos especificar beforefieldinit
- 22. C# Instance Constructor vs Static Constructor
- 23. Debe copiar el constructor sea privado o público
- 24. Relevancia del constructor 'público' en la clase abstracta
- 25. ¿Por qué el constructor de java.io.FileDescriptor es público?
- 26. ¿Es un constructor público en una clase abstracta un código?
- 27. ¿Para qué JAXB necesita un constructor público no-arg?
- 28. El constructor estático se puede ejecutar después del constructor no estático. ¿Es esto un error del compilador?
- 29. constructor o constructor de copia?
- 30. jQuery constructor y init
es un constructor estático garantiza que es llamado una vez? ¿Qué pasa si el tipo nunca se usa dentro del ciclo de vida de una aplicación? – MPritchard
@MPritch, tiene razón en ese caso, no será llamado. Pero ni siquiera tengo que preocuparme por las cosas que una clase está haciendo (o no haciendo) si no estoy usando (o refiriéndolo) a ninguna parte de mi aplicación, el rito. –
que todo depende de lo que está haciendo en el constructor – MPritchard