Как создать тип.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