Debería utilizar object o proporcionar una interfaz genérica.
La versión genérica se vería así:
interface IFace<T1, T2>
{
T1 Prop1 { get; }
T2 Prop1 { get; }
}
Esto permitirá que el tipo de implementación de dar esas propiedades cualquier tipo que quiere, pero el inconveniente es que cada vez que se acepta la interfaz es necesario especificar esos dos tipos:
public void DoSomething(IFace<int, string> sadFace)
...
Esto suele ser problemático, muy limitante al menos, puede ser "resuelto" dando la interfaz de una interfaz de base donde ambas propiedades están disponibles con object
tipos de retorno.
creo que la mejor solución, sin llegar a repensar su enfoque es definir una IFace interfaz:
interface IFace
{
object Prop1 { get; }
object Prop1 { get; }
}
Luego, en su clase de implementar la interfaz explícitamente así:
class MyClass: IFace
{
public string Prop1 { get; }
public int Prop2 { get; }
object IFace.Prop1 { get; }
object IFace.Prop1 { get; }
}
Este permitirá a los usuarios que saben que el objeto es del tipo MyClass
referirse a Prop1
y Prop2
por sus tipos reales y todo lo que use IFace
puede usar p roperties con un tipo de devolución de object
.
Yo he usado algo que se parece al último fragmento de código, e incluso la versión anterior de "interfaz genérica con interfaz básica", pero ese era un escenario muy especializado y no sé si podría haberlo resuelto de otra manera.
Ninguno de los dos lograría realmente lo que se solicita con un buen motivo. Iface no sería equivalente a Iface . –
Lazarus
@Lazarus: si el OP espera que diferentes clases implementen * la misma interfaz * pero permiten que los campos varíen según el tipo, entonces solo la segunda y la tercera opción apoyarían eso. Sin embargo, si el OP está buscando un medio para simplemente declarar propiedades con ciertos nombres (e ignorar el tipo), entonces aún puede servir para algún propósito. En general, es un requisito inusual para las interfaces para comenzar. – LBushkin
La versión 'dinámica' no necesita ser genérica. – Trillian