Как я могу испускать .NET-тип с двумя свойствами, которые перегружены только по типу возврата?

Мне нужно создать тип, который имеет два свойства с тем же именем и только отличается по типу возврата. Динамически излучать этот тип посредством отражения вполне приемлемо.

Что-то вроде этого:

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

Я понимаю, что я не могу использовать это свойство из С# или VB.NET или многих других языков .NET.

Чтобы избежать ответов, объясняющих мне, почему я не хочу этого делать, позвольте мне объяснить, зачем мне это нужно: мне нужно воспроизвести ошибку.

В частности, у меня есть ошибка в AutoFixture, где Moq типа приведет к тому, что он исключит исключение в некоторых случаях. Проблема в том, что тип, выпущенный Moq, содержит два свойства, названные "Mock", которые отличаются только типом возврата.

Я хотел бы воспроизвести этот сценарий в unit test, но я бы предпочел не брать зависимость от Moq только по этой единственной причине, поэтому я хотел бы воспроизвести поведение внутри пакета тестов.

Ответ 1

У вас может быть 2 свойства с тем же именем, которые отличаются только типом, и вы можете сделать это без динамического испускания типа:

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);
    }
}

Выход этого кода будет:

X: System.Int32
X: System.String