Veo muchos métodos que especifican una interfaz como valor de retorno. ¿Es cierto mi pensamiento de que significa que mi método puede devolver todos los tipos de clases que hereden de esa interfaz? si no, por favor dame una buena respuesta.Si un método devuelve una interfaz, ¿qué significa?
Respuesta
Sí, su método podría devolver cualquier tipo que implemente esa interfaz.
Aquí es un ejemplo:
using System;
class Foo
{
public IComparable GetComparable()
{
// Either of these return statements
// would be valid since both System.Int32
return 4;
// and System.String
return "4";
// implement System.IComparable
}
}
Agregaría que casi siempre es una mala idea tratar de olfatear el tipo real y abatir. –
@Steven - Por lo general, es una mala idea, sí, pero hay casos en que la transmisión descendente puede ser muy beneficiosa. –
Buen ejemplo :) –
Sí, ese método puede devolver un objeto de cualquier tipo que implementa la interfaz.
Pero, para usar los miembros que no son de interfaz de un tipo particular, tendrá que convertirlo a ese tipo.
Sí, traté de solucionarlo de inmediato, pero alguien más estaba editando mi publicación también. Me equivoqué. Pero obtuve mi insignia de limpieza. :) –
El método puede devolver un tipo de clase o un tipo de valor encuadrado. No puede devolver un tipo de valor real. La distinción a veces puede ser importante, ya que los tipos de valores encuadrados se comportan como tipos de clase.En algunos casos, una rutina que acepta un 'U donde U: IEnumerable
Sí, significa que lo único que sabe sobre el objeto que se devuelve es que implementa la interfaz.
De hecho, el tipo real del objeto puede que ni siquiera esté accesible para el código de llamada. Podría ser un tipo privado en un ensamblaje por separado.
Y, de hecho, el método puede devolver un tipo diferente de una invocación a la siguiente (como en el caso de una fábrica abstracta).
¡Una respuesta que compite, pero me siento obligado a votar! Sus bits de información extra serían muy útiles para alguien que intenta entender esto. –
@Patrick Karcher - ¡Gracias! :-) –
C++ admite una técnica de programación llamada polimorfismo. Esa es una clase derivada que puede parecer una clase base a otro código que no sabe nada sobre las clases derivadas. Echar un vistazo a su ejemplo:
class Shape
{
public:
virtual float Area() const = 0;
};
class Rectangle: public Shape
{
public:
Rectangle (float width, float height)
: m_width(width)
, m_height(height)
{}
virtual float Area() const
{
return m_width * m_height;
}
private:
float m_width;
float m_height;
};
class Circle: public Shape
{
public:
Circle (float radius)
: m_radius(radius)
{}
virtual float Area() const
{
return 3.141592653f*(m_radius*m_radius);
}
private:
float m_radius;
};
Ahora se puede ver en el código que hemos creado una forma de clase base (nuestra interfaz) y dos clases derivadas que se especializan esta clase, un rectángulo, un círculo otra. Ahora vamos a crear una función que imprime el área de una figura:
void PrintArea (const Shape& shape)
{
printf("Area of shape = %f",shape.Area());
}
Esta función no le importa si es un círculo de rectángulo. O lo que importa es que ha pasado una forma y que puede obtener el área, independientemente del tipo.
lo que este código utiliza esta función:
Rectangle r (5.0f,4.0f);
Circle c (25.0f);
PrintArea(r); // Print the area of the rectangle
PrintArea(c); // Print the area of the circle
Espero que esto ayude.
Vaya, disculpe, escribí esto en C++, no leí la pregunta lo suficiente como para ver que quería decir C#. Pero el mismo proceso aplica. Avíseme si desea que reescriba el código de muestra anterior en C#. – Cthutu
gracias Cthutu. No esta muestra es muy clara. –
- 1. ¿Qué significa cuando un método Perl devuelve un "hashref"?
- 2. "Programa a una interfaz". Qué significa eso?
- 3. ¿Qué significa programar en una interfaz?
- 4. ¿Qué significa definir constantes en una interfaz?
- 5. Cómo encontrar si un método está implementando una interfaz específica
- 6. Método devolver una interfaz
- 7. ¿Qué significa 'interfaz de usuario enriquecida'?
- 8. ¿Qué significa el retorno al final de un método nulo?
- 9. interfaz para el método que devuelve su propio tipo
- 10. Declarar que se devuelve una estructura desde un método de interfaz
- 11. Cómo determinar por reflexión si un Método devuelve 'nulo'
- 12. ¿Qué significa si una llamada a método comienza con dos dos puntos?
- 13. Prueba si un objeto implementa una interfaz
- 14. ¿Qué significa "método de clase" en ruby?
- 15. ¿Qué significa const después de una firma de función/método?
- 16. ¿Qué significa el Método <ClassName>?
- 17. ¿Por qué un método Moq-mocked devuelve nulo?
- 18. Ruby: ¿Qué significa el módulo incluido en un método?
- 19. Convenciones de nomenclatura: ¿Qué nombre un método que devuelve un booleano?
- 20. ¿Qué significa la palabra clave virtual al anular un método?
- 21. Comprobando si ActiveRecord find devuelve un resultado
- 22. Implementación de ISupportErrorInfo: ¿qué significa?
- 23. ¿Qué sucede si no devuelve un valor en C++?
- 24. ¿Qué significa una "interfaz de fórmula estándar para un data.frame" en R?
- 25. Método privado en una interfaz C++?
- 26. ¿Cómo implementar una interfaz explícitamente con un método virtual?
- 27. ¿Qué sucede si main() no devuelve un valor int?
- 28. implementar una interfaz con un método privado en vb.net
- 29. ¿Cómo comprobar si un objeto implementa una interfaz?
- 30. ¿Qué significa :: en C++?
@ddimitrov las preguntas más básicas están permitidas en SO, bien podría haber otra respuesta plausible, que es quizás la razón por la que preguntó. tu comentario no agrega nada –
@ sam-holder, soy corregido. Eliminado mi comentario original. – ddimitrov