Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何发出一个.NET类型,该类型有两个仅在返回类型上重载的属性?_.net_Moq_Autofixture - Fatal编程技术网

如何发出一个.NET类型,该类型有两个仅在返回类型上重载的属性?

如何发出一个.NET类型,该类型有两个仅在返回类型上重载的属性?,.net,moq,autofixture,.net,Moq,Autofixture,我需要创建一个类型,该类型有两个同名属性,并且返回类型不同。通过反射动态发射这种类型是完全可以接受的 大概是这样的: public TypeA Prop { get; } public TypeB Prop { get; } 我知道我不能从C#或VB.NET或许多其他.NET语言中使用此属性 为了避免回答我为什么不想这样做,让我解释一下为什么我需要它:我需要它来复制一个bug 更具体地说,我有一个bug,在某些情况下,某个类型的错误会导致它抛出异常。问题是Moq发出的类型包含两个名为“Mock

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

大概是这样的:

public TypeA Prop { get; }
public TypeB Prop { get; }
我知道我不能从C#或VB.NET或许多其他.NET语言中使用此属性

为了避免回答我为什么不想这样做,让我解释一下为什么我需要它:我需要它来复制一个bug

更具体地说,我有一个bug,在某些情况下,某个类型的错误会导致它抛出异常。问题是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);
    }
}
此代码的输出将为:

X:System.Int32
X:System.String


+1为“脚、瞄准、射击”类型的材料提供有效的理由:)这正是我复制bug所需要的。非常感谢:)