¿Cómo puedo emitir un tipo .NET con dos propiedades que están sobrecargados sólo en el tipo de devolución?

StackOverflow https://stackoverflow.com/questions/1509098

  •  19-09-2019
  •  | 
  •  

Pregunta

Es necesario crear un tipo que tiene dos propiedades con el mismo nombre, y sólo se diferencian en el tipo de retorno. Dinámicamente emisor de este tipo a través de la reflexión es perfectamente aceptable.

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 que las respuestas que me explique 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 a Moq de un tipo hará que una excepción en ciertos casos. El problema es que el tipo que emiten los Moq contiene dos propiedades tanto llamado 'Mock' que difieren sólo en el tipo de retorno.

Me gustaría reproducir este escenario en una prueba de unidad, pero yo prefiero no tener una dependencia de Moq sólo por esa sola razón, por lo que me gustaría reproducir el comportamiento internamente en el banco de pruebas.

¿Fue útil?

Solución

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 del 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top