Wow. ¡Muchas preguntas aquí!
¿Cuándo DEBO usar IDisposable? ¿Solo cuando tengo recursos no administrados?
IDisposable
es generalmente utilizado para limpiar los recursos, pero eso no es necesariamente todo lo que es bueno para. Es un patrón general notificar al objeto consumido que ha terminado con él. Un ejemplo es un contador de tiempo:
using(var timer = new MyTimer())
{
//do some stuff
}
En este caso, llamar Dispose
no es necesariamente la liberación de los recursos, que es sólo una convenientes & consistentes forma de saber el temporizador "OK, yo (dos claves para un modelo!) 'He terminado con usted ahora' y el temporizador puede detener el cronometraje, y tal vez registrar el tiempo en alguna parte.
Otra buena regla general es si necesita tener un finalizador, por la razón que sea, generalmente también debe proporcionar IDisposable
acceso a la misma rutina para que la clase pueda optar por finalizar la clase antes en lugar de esperar en el GC .
¿Qué variaciones del patrón disponer hay y por qué varían?
Sólo hay un tipo real "específico" de aplicación IDisposable
yo sepa - Finalizar el/patrón Desechar:
public class MyClass : IDisposable
{
void IDisposable.Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Free other state (managed objects).
}
// Free your own state (unmanaged objects).
// Set large fields to null.
}
~MyClass()
{
Dispose(false);
}
}
¿Cuáles son los recursos no administrados comunes que debería tener en cuenta?
Se debe suponer que todo lo que implemente IDisposable
, especialmente en las bibliotecas .NET, tiene identificadores a recursos no administrados y debe desecharse. Normalmente, solo accederá a recursos no administrados a través de estos. Si no, lo sabrá, generalmente construyendo un controlador o algo.
¿Es erróneo o erróneo implementar IDisposable?
Puede ser inútil abusar de él, pero no es directamente dañino.
debe deshacerse llamadas nunca se encadenen
Una clase sólo debe desechar cualquier IDisposables que crea internamente. Si tiene dependencias desechables que se inyectaron o viven más allá del alcance de la clase, nunca debe deshacerse de ellas.
¡Grandes respuestas! Bien pensado señor! – Firoso