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

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

Примерно так:

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

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

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

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

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

1 Ответ

14 голосов
/ 02 октября 2009

У вас может быть 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...