English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Constructor, destructor
Constructor:
1. Si no se proporciona ningún constructor, el sistema proporciona automáticamente un constructor por defecto, inicializando todos los miembros con valores por defecto (los tipos de referencia son referencias nulas null, los tipos de valor son 0, el tipo bool es false);
2. Si se proporciona un constructor con parámetros, el sistema no proporciona un constructor por defecto;
3. El constructor se puede sobrecargar: se pueden proporcionar múltiples versiones de constructores diferentes, distinguidas por el número y el tipo de parámetros;
4. Constructor privado: no se puede instanciar el objeto a través de este constructor, se puede instanciar llamando a la función estática; cuando se utiliza solo como contenedor de algunos miembros estáticos o propiedades, se puede definir un constructor privado para evitar que se instancie;
Los constructores generales son constructores de instancia, siempre que se cree una instancia, se ejecuta el constructor;
Constructor estático:
1. Solo se puede definir uno, se ejecuta una vez en el máximo, solo se llama por la biblioteca de ejecución .NET antes de llamar a cualquier miembro de la clase por primera vez,
2. No puede llevar parámetros, no tiene修饰adores de acceso, solo puede acceder a los miembros estáticos de la clase, no puede acceder a los miembros de instancia de la clase;
3. Si la clase tiene algunos campos estáticos, propiedades que necesitan inicializarse desde una fuente externa antes de usar la clase por primera vez, utilice el constructor estático;
4. El constructor estático y el constructor de instancia sin parámetros se pueden definir simultáneamente, no habrá conflicto en la ejecución de qué constructor en qué momento;
En el constructor se puede llamar a otros constructores propios: this(), o el constructor de la clase base: base(), se puede llamar a otros constructores de manera similar a la sintaxis de herencia;
Sólo lectura de campo readonly: similar a constante const, no se puede modificar su valor, pero el campo de solo lectura se declara con readonly, puede no estar inicializado, inicializarlo en el constructor y después no se puede cambiar su valor;
Instanciación de tipos anónimos: var a = new{f}1=“1ad", f2="34", f3=5, f4=6};
Constructor: se utiliza para destruir la instancia de la clase
• No se puede definir un destructor en una estructura. Solo se puede usar en clases.
• Una clase solo puede tener un destructor.
• No se puede heredar ni sobrecargar el destructor.
• No se puede llamar al destructor. Se llaman automáticamente. Están controlados por el recolector de basura, que llama al destructor (si existe) y recicla la memoria utilizada para almacenar el objeto. También se llama al destructor cuando el programa sale
• El destructor no tiene modificadores ni parámetros
Se puede forzar la recolección de basura llamando a Collect, pero se debe evitar hacerlo en la mayoría de los casos, ya que puede causar problemas de rendimiento
C# no requiere mucha gestión de memoria. Esto se debe a que el recolector de basura del .NET Framework gestiona implícitamente la asignación y liberación de memoria de los objetos. Sin embargo, cuando la aplicación encapsula recursos no administrados como ventanas, archivos y conexiones de red, debe usar el destructor para liberar estos recursos. Cuando un objeto cumple con la destrucción, el recolector de basura ejecuta el método Finalize del objeto.
Si su aplicación utiliza recursos externos costosos, también recomendamos proporcionar una manera de liberar recursos explícitamente antes de que el recolector de basura libere el objeto. Esto se puede hacer implementando el método Dispose de la interfaz IDisposable, que ejecuta la limpieza necesaria para el objeto. Esto puede mejorar significativamente el rendimiento de la aplicación. Incluso con este control explícito de recursos, el destructor es una medida de protección que se puede usar para limpiar recursos si la llamada al método Dispose falla
class Car { -Car() { // … … } }
Este destructor llama implícitamente al método Finalize() de todos los实例 en la cadena de herencia recursivamente
public class Bus { protected static readonly DateTime globalStartTime; protected int RouteNumber { get; set; } static Bus() //Constructor estático { globalStartTime = DateTime.Now; Console.WriteLine("Static ctor sets global start time to {0}", globalStartTime.ToLongTimeString()); } public Bus(int routeNum) { RouteNumber = routeNum; Console.WriteLine("{0} se ha creado.", RouteNumber)} } public void Drive() { TimeSpan elapsedTime = DateTime.Now - globalStartTime; Console.WriteLine("{0} está comenzando su ruta {1:N2} minutos después de la hora de inicio global {2}. this.RouteNumber, elapsedTime.TotalMilliseconds, globalStartTime.ToShortTimeString()); } } class TestBus { static void Main() { Bus bus = new Bus(71); bus.Drive(); System.Threading.Thread.Sleep(25); Bus bus2 = new Bus(72); bus2.Drive(); System.Console.WriteLine("Presione cualquier tecla para salir."); System.Console.ReadKey(); } } /* Salida: El constructor estático establece la hora de inicio global en 10:04:08 AM 71 se ha creado. 71 está comenzando su ruta 21.00 minutos después de la hora de inicio global 10:04 AM. 72 se ha creado. 72 está comenzando su ruta 46.00 minutos después de la hora de inicio global 10:04 AM. */
Aquí termina lo que el editor ha preparado para usted: un análisis profundo de los constructores y destructores en C#, esperamos que sea útil para usted, ¡por favor, apoye a la tutorial de alarido~