Concepto de programación orientado a objetos.

18/11/2009 - 23:48 por kapsule | Informe spam
Hola a todos.

Llevo varios años programando en c# y tengo una duda en cuanto a los
conceptos de programación de C#. Es decir, supongamos que tenemos una clase
con la siguiente estructura.

public class demo: IDisposable
{
public void Dispose()
public void Añadir()
public void Listar()
}

Si tengo una clase de este tipo entiendo que puedo usar la función using la
cual me permite eliminar el objeto una vez finalizada la gestión con dicha
clase. Mi pregunta es la siguiente ¿Es mejor utilizar este tipo de
estructuras o bien otra como la siguiente?

public interface IDemo
{
public void Añadir()
public void Listar()
}

public class demo: IDemo
{
public void Añadir()
public void Listar()
}

La única diferencia que me encuentro con este caso es que no puedo utilizar
using para borrar el objeto. ¿Qué es mejor? Utilizar una clase normal y
eliminarla por medio de un using o bien utilizar una clase la cual deriva de
una interface? Que opción permite obtener un mejor rendimiento?

Gracias.
 

Leer las respuestas

#1 Alberto Poblacion
19/11/2009 - 09:10 | Informe spam
"kapsule" wrote in message
news:
La única diferencia que me encuentro con este caso es que no puedo
utilizar
using para borrar el objeto. ¿Qué es mejor? Utilizar una clase normal y
eliminarla por medio de un using o bien utilizar una clase la cual deriva
de
una interface? Que opción permite obtener un mejor rendimiento?



No tienen nada que ver ua cosa y la otra.
El IDisposing, con el método Dispose que te permite emplear el "using",
solo tiene sentido cuando tu clase emplea recursos no-gestionados, es decir
está llamando a código que no es de .Net y que requiere alguna operación
para "cerrar" o "liberar" lo que tiene "abierto" o "asignado". Los recursos
gestionados (otras clases de .net, o la propia clase que implementa el
IDisposable) se liberan automáticamente mediante el Garbage Collector, y no
requieren para nada usar el Dispose().

La otra técnica que propones, es decir la de declarar una interfaz IDemo
y luego una clase demo que implementa esta interfaz, en general tampoco vale
para nada salvo en un par de casos concretos:
1) Que la interfaz realmente sea de uso general y vayas a implementarla
varias clases.
2) Que pretendas exponer la clase a través de un COM-Callable-Wrapper
para ser utilizada como objeto COM.
Por lo demás, es suficiente con que declares la clase directamente sin usar
ninguna interfaz:
public class demo
{
public void Añadir()
public void Listar()
}

Finalmente, cabe señalar que los dos enfoques que planteabas como
alternativas no son excluyentes, sino que pueden usarse a la vez si tu clase
cumple los requisitos para necesitar ambos. Puedes implementar los dos
interfaces en la misma clase:

public class demo: IDemo, IDisposable
{
public void Dispose()
public void Añadir()
public void Listar()
}

O bien puedes hacer que una interfaz herede de la otra:

public interface IDemo:IDisposable
{
public void Añadir()
public void Listar()
}
public class demo: IDemo
{
public void Dispose()
public void Añadir()
public void Listar()
}

Preguntas similares