2009-10-02 12 views
11

Necesito crear un tipo que tenga dos propiedades con el mismo nombre y que solo difiera en el tipo de devolución. La emisión dinámica de este tipo a través de la reflexión es perfectamente aceptable.¿Cómo puedo emitir un tipo .NET con dos propiedades que están sobrecargadas solo en el tipo de devolución?

Algo como esto:

public TypeA Prop { get; } 
public TypeB Prop { get; } 

Yo entiendo que no puedo consumir esta propiedad de C# o VB.NET o un montón de otros lenguajes .NET.

Para evitar respuestas que me expliquen por qué no quiero hacer esto, permítanme explicar por qué lo necesito: lo necesito para reproducir un error.

Más específicamente, tengo un error en AutoFixture donde un Moq de un tipo hará que arroje una excepción en ciertos casos. El problema es que el tipo emitido por Moq contiene dos propiedades ambas llamadas 'Mock' que solo difieren en el tipo de devolución.

Me gustaría reproducir este escenario en una prueba unitaria, pero preferiría no tener una dependencia de Moq solo por ese único motivo, por lo que me gustaría reproducir el comportamiento internamente en el conjunto de pruebas.

+6

1 para dar razones válidas para lo que sería de otra manera "pie, objetivo, sh oot "tipo de material :) –

Respuesta

14

Puede tener 2 propiedades con el mismo nombre que sólo se diferencian por el tipo, y se puede hacer eso sin emitir de forma dinámica el tipo:

class Foo 
{ 
    public string X 
    { 
     get { return "Hello world"; } 
    } 
} 

class Bar : Foo 
{ 
    public new int X 
    { 
     get { return 42; } 
    } 
} 

void Main() 
{ 
    foreach(PropertyInfo prop in typeof(Bar).GetProperties()) 
    { 
     Console.WriteLine("{0} : {1}", prop.Name, prop.PropertyType); 
    } 
} 

La salida de este código será:

X: System.Int32
X: System.String

+0

Eso era exactamente lo que necesitaba para reproducir el error. Muchas gracias :) –

Cuestiones relacionadas