Forums Últimos mensajes - Powered by IBM
 

INterfases?? para que??

06/02/2008 - 04:50 por AAAAA | Informe spam
Hola amigos, tengo algunas dudas con respecto a las interfases

Quisera saber para que me sirven y en que escenario serian utiles
verdaderamente

disculpen la ignorancia pero:

1. Para implementar destruccion explicita de recursos se usa el metodo
Dispose, las clases que quieren tener esta caracteristica tienen que
implementar la interfase IDisposable, por que?, se supone que que en la
interfase no hay codigo, solo declaraciones; el metodo Dispose de la
Interfase IDisposable no tiene codigo, yo lo tengo que implementar, yo tengo
que ponerle codigo a ese metodo, ya que esta sin codigo de que me sirve?,
por que no puedo mejor poner ese codigo en un metodo propio de mi clase y
llamarlo al final, cuando se destruya la clase?, por faovr disculpen si no
veo mas alla de lo evidente.

otro, por ejemplo algo parecido, la interfase IComparable, que permite
implementar el metodo CompareTo un metodo que esta declarado en la Interfase
ICoparable y que tampoco tienen codigo, es un metodo que debe devolver un
entero, bien, si yo tengo que ponerle el codigo, por que mejor no hago un
metodo que tenga ese codigo y lo llamo para hacer la comparacion, es decir
para que uso interfaces?

Por favor denme una buena explicacion ya que no logro captar la utilidad de
las interfases


Gracias

Saludos

Cesar
 

Leer las respuestas

#1 Alberto Poblacion
06/02/2008 - 09:41 | Informe spam
"AAAAA" wrote in message
news:%
Quisera saber para que me sirven y en que escenario serian utiles
verdaderamente

disculpen la ignorancia pero:

1. Para implementar destruccion explicita de recursos se usa el metodo
Dispose, las clases que quieren tener esta caracteristica tienen que
implementar la interfase IDisposable, por que?, se supone que que en la
interfase no hay codigo, solo declaraciones; el metodo Dispose de la
Interfase IDisposable no tiene codigo, yo lo tengo que implementar, yo
tengo que ponerle codigo a ese metodo, ya que esta sin codigo de que me
sirve?, por que no puedo mejor poner ese codigo en un metodo propio de mi
clase y llamarlo al final, cuando se destruya la clase?, por faovr
disculpen si no veo mas alla de lo evidente.

otro, por ejemplo algo parecido, la interfase IComparable, que permite
implementar el metodo CompareTo un metodo que esta declarado en la
Interfase ICoparable y que tampoco tienen codigo, es un metodo que debe
devolver un entero, bien, si yo tengo que ponerle el codigo, por que mejor
no hago un metodo que tenga ese codigo y lo llamo para hacer la
comparacion, es decir para que uso interfaces?

Por favor denme una buena explicacion ya que no logro captar la utilidad
de las interfases



Si solo vas a llamar a los métodos en cuestión dentro de tu clase,
entonces efectivamente no es muy útil que definas una interfase. Su utilidad
se pone de manifiesto cuando escribes código genérico que sirve para llamar
a muchas clases. Por ejemplo, referente al IDisposable, si quisieras
escribir un método genérico para liberar objetos podrías hacerlo asi:

public void liberar (IDisposable objeto)
{
objeto.Dispose();
}

Y podrías pasar a este método cualquier objeto de cualquier clase que
implemente IDisposable. Por cierto, algo parecido es lo que hace el
compilador cuando utilizas la construcción "using":

using (MiClase x = new MiClase())
{
//Sentencias
}

Esto solo se puede hacer si MiClase implementa IDisposable, porque el
compilador lo traduce de forma similar a esta:
MiClase x = new MiClase();
try
{
//Sentencias
}
finally
{
((IDisposable)x).Dispose();
}

De forma similar, se pueden usar clases que implementen IEnumerable para
llamarlas en un foreeach, porque el compilador convierte el foreach en
llamadas a los métodos de IEnumerable.

Un ejemplo de uso del IComparable que mencionabas es el método Sort de la
clase Array. Este método es capaz de ordenar un array de cualquier clase de
objetos, con la condición de que esos objetos implementen el IComparable
para poderlos comparar unos con otros. Por ejemplo:

class MiClase : IComparable {...}
MiClase[] arreglo;
//(Cargar "arreglo" de elementos)
Array.Sort(arreglo); //Esto funciona si los elementos son IComparable

¿Cómo funciona el método Sort? Pues se pone a examinar los elementos del
array determinando si están en el orden correcto y cambiando de posición los
que sea necesario. Para determinar si están en el orden correcto dos
elementos p y q, los compara asi: ((IComparable)p).CompareTo(q). Por eso se
necesita que los elementos implementen IComparable. Si tuvieras que llamar
directamente al método CompareTo de MiClase, como decías en tu pregunta,
entonces no sería posible programar el método Sort antes de que existiera
MiClase, y solo serviría para MiClase, no para cualquier clase que se
invente con posterioridad. En cambio, el interfase sirve para poder escribir
nuevas clases sobre las que funcione el método Sort ya existente.

Preguntas similares