11

同じ名前の 2 つのプロパティを持ち、戻り値の型だけが異なる型を作成する必要があります。反射を介してこのタイプを動的に放出することは完全に許容されます。

このようなもの:

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

このプロパティを C# や VB.NET、または他の多くの .NET 言語から使用できないことは理解しています。

なぜこれをしたくないのかを説明する答えを避けるために、なぜそれが必要なのかを説明させてください.バグを再現するために必要です.

より具体的には、AutoFixtureにバグがあり、あるタイプのMoqによって特定のケースで例外がスローされることがあります。問題は、Moq によって発行された型に、戻り値の型のみが異なる 'Mock' という名前の 2 つのプロパティが含まれていることです。

単体テストでこのシナリオを再現したいのですが、その 1 つの理由だけで Moq に依存したくないので、テスト スイートの内部で動作を再現したいと思います。

4

1 に答える 1

14

タイプのみが異なる同じ名前の 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

于 2009-10-02T12:15:29.377 に答える