问题 如何使用仅在返回类型上重载的两个属性发出.NET类型?


我需要创建一个具有两个具有相同名称的属性的类型,并且只在返回类型上有所不同。通过反射动态发射这种类型是完全可以接受的。

像这样的东西:

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

我明白我不能从C#或VB.NET或许多其他.NET语言中使用这个属性。

为了防止答案向我解释为什么我不想这样做,让我解释一下为什么我需要它:我需要它来重现一个bug。

更具体地说,我有一个错误 AutoFixture 哪里一个 起订量 在某些情况下,类型将导致它抛出异常。问题是Moq发出的类型包含两个名为'Mock'的属性,它们仅在返回类型上有所不同。

我想在单元测试中重现这个场景,但是我不想仅仅因为这个原因而依赖于Moq,所以我想在测试套件内部重现这种行为。


8915
2017-10-02 11:58


起源

给出有效理由的+1,否则将是“脚,目标,射击”类型的材料:) - Lasse Vågsæther Karlsen


答案:


您可以拥有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


14
2017-10-02 12:15



这正是我需要重现的错误。非常感谢 :) - Mark Seemann