Estoy escribiendo un método en C# (2.0) que tiene que devolver una colección de objetos simples. Normalmente haría algo como esto:Declarar que se devuelve una estructura desde un método de interfaz
class MyWidget
{
struct LittleThing
{
int foo;
DateTime bar;
}
public IList<LittleThing> LookupThings()
{
// etc.
}
}
Sin embargo, tengo que declarar este método en una interfaz. La persona que llama no puede ver MyWidget
, solo una interfaz IWidget
. La configuración anterior no funciona en esa situación, porque C# no permite definir tipos dentro de una interfaz. ¿Cuál es la mejor forma o la mejor manera de hacer tal declaración?
Lo más directo que pensé es simplemente declarar LittleThing
fuera de la interfaz. Eso no parece genial, por un par de razones. Uno: solo es usado por ese único método en esa clase única, por lo que no parece que LittleThing
deba ser un tipo independiente que simplemente flota por sí mismo. Dos: si se escriben métodos similares para otras clases, devolverán diferentes tipos de datos (por buenas razones de diseño), y no quiero saturar el espacio de nombres con una tonelada de estructuras con nombres similares que difieren solo ligeramente. de cada uno.
Si pudiéramos actualizar nuestra versión de .Net, simplemente devolvería un Tuple<>
, pero eso no va a ser una opción por algún tiempo.
[Editado para agregar: El pequeño objeto no necesita contener más de dos campos, por lo que se KeyValuePair<K,V>
no es cortarlo.]
[Editado para añadir más: IWidget
se implementa por una sola clase, Widget
. Creo que es extraño tener una interfaz para una sola clase, pero esto se hizo para satisfacer una antigua política de codificación que requería que el contrato siempre estuviera en un ensamblaje separado de la implementación. Dicha política se ha ido, pero no tenemos los recursos para refactorizar toda la aplicación y eliminar todas las interfaces innecesarias.]
¿Cuál es la mejor práctica?
¿Cómo le gustaría llamar a la Método LookupThings? El código de llamada debe tener alguna forma de saber qué se devuelve. – Wilhelm
Wilhelm, ese es el quid de mi pregunta. Sé que necesito declarar el tipo del valor de retorno * en algún lugar *. Lo que estoy preguntando es el lugar más sensato para poner esa declaración. – Auraseer
Si LookupThings es el único método que devuelve el tipo, y espera que otras clases usen otros tipos, ¿por qué es parte del contrato? Parece que las clases de implementación pueden hacer cualquier cosa con este método en particular. – Wilhelm