Recibo una advertencia cuando ejecuto algún código a través de la utilidad de análisis de código de Visual Studio que no estoy seguro de cómo resolver. Quizás alguien aquí haya encontrado un problema similar, lo haya resuelto y esté dispuesto a compartir sus ideas.Referencia de objeto de paso CA2000 al constructor base en C#
Estoy programando una celda personalizada pintada que se usa en un control DataGridView. El código se parece a:
public class DataGridViewMyCustomColumn : DataGridViewColumn
{
public DataGridViewMyCustomColumn() : base(new DataGridViewMyCustomCell())
{
}
Se genera la advertencia siguiente:
CA2000: Microsoft.Reliability: En el método 'DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()' llamar System.IDisposable.Dispose en el objeto 'nuevo DataGridViewMyCustomCell() 'antes de que todas las referencias estén fuera del alcance.
entiendo que me está advirtiendo DataGridViewMyCustomCell (o una clase que hereda de) implementa la interfaz IDisposable y el método Dispose() debe ser llamado a limpiar cualquier recurso reclamadas por DataGridViewMyCustomCell cuando ya no lo es.
Los ejemplos que he visto en Internet sugieren un bloque de uso para determinar la vida útil del objeto y hacer que el sistema lo elimine automáticamente, pero la base no se reconoce cuando se mueve al cuerpo del constructor para que pueda ' Escribo un bloque de uso a su alrededor ... que no estoy seguro de querer hacer de todos modos, ya que ¿no sería eso lo que indicaría el tiempo de ejecución para liberar el objeto que aún podría usarse más adelante dentro de la clase base?
Mi pregunta es, ¿el código está correcto como está? O bien, ¿cómo podría refactorizarse para resolver la advertencia? No quiero suprimir la advertencia a menos que sea realmente apropiado hacerlo.
+1 para 'completamente roto en VS10'. Es muy difícil convencer a la gente para que se una a mí en un paseo de mejora de la calidad del código cuando las herramientas me hacen parecer tan estúpido ... –