En su ejemplo, no debe disponer de un objeto como argumento. Esto no es aconsejable porque ese objeto podría usarse fuera de su método. La eliminación de objetos de utilidad debe (normalmente) tener lugar en el mismo método que usted lo crea. Excepción para objetos de clase amplia u objetos de estado.
Como en otras respuestas, use using
para crear y eliminar un objeto. Esto solo es realmente necesario en objetos que usan algunos recursos valiosos, como la conexión a una base de datos. Una vez dicho esto, siempre debe llamar al Dispose()
(explícitamente o por using
) si el objeto lo implementa porque eso significa que utiliza grandes cantidades de recursos no administrados.
Todos los objetos de .NET Framework que no llame a Dispose
en (de cualquier manera) finalmente se autodispondrán por Garbage Collector. La implementación adecuada de la interfaz IDisposable
debe tener un destructor/finalizador que llame al Dispose
. Esto es para asegurarse de que no se pierdan recursos valiosos solo por un código incorrecto. Sus recursos se liberarían mucho más tarde, pero lo harían y eso es importante. Así es como se implementan todas las clases desechables en .NET y cómo todas las clases deberían implementar IDisposable
.
El código debería tener este aspecto:
using(Graphics g = new Graphics())
{
SomeMethod(g)
{
...
}
}
Comprobar this de las recomendaciones de Microsoft sobre IDisposable.Dispose
método.
Además de 'no', su método tampoco * debe * ser responsable de eliminar el objeto gráfico. Es importante que la vida útil de los objetos gráficos se administre en un solo lugar, lo que significa que debe desecharse en la misma clase que la creó. Tener un objeto en un lugar indeterminado en la pila de llamadas hace que el código sea difícil de entender y mantener, y podría llevar a errores más adelante. – MattDavey