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

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

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

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

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

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

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

Я хотел бы воспроизвести этот сценарий в модульном тесте, но я бы предпочел не брать зависимость от 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

Другие вопросы по тегам