Как я могу создать тип .NET с двумя свойствами, которые перегружаются только для возвращаемого типа?
-
19-09-2019 - |
Вопрос
Мне нужно создать тип, который имеет два свойства с одинаковым именем и отличается только типом возвращаемого значения.Динамическое создание этого типа посредством отражения вполне приемлемо.
Что-то вроде этого:
public TypeA Prop { get; }
public TypeB Prop { get; }
Я понимаю, что не могу использовать это свойство из C#, VB.NET или многих других языков .NET.
Чтобы избежать ответов, объясняющих мне, почему я не хочу этого делать, позвольте мне объяснить, зачем мне это нужно:Мне это нужно, чтобы воспроизвести ошибку.
Точнее у меня ошибка Автофиксация где Мокк типа приведет к тому, что в определенных случаях он выдаст исключение.Проблема в том, что тип, создаваемый Moq, содержит два свойства с именем «Mock», которые отличаются только типом возвращаемого значения.
Я хотел бы воспроизвести этот сценарий в модульном тесте, но я бы предпочел не использовать зависимость от Moq только по этой единственной причине, поэтому я хотел бы воспроизвести поведение внутри набора тестов.
Решение
У вас может быть два свойства с одинаковым именем, которые различаются только типом, и вы можете сделать это без динамического создания типа:
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);
}
}
Вывод этого кода будет:
ИКС :System.Int32
ИКС :Система.Строка