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

StackOverflow https://stackoverflow.com/questions/1509098

  •  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
ИКС :Система.Строка

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top