Wie kann ich einen .NET-Typ mit zwei Eigenschaften emittieren, die nur auf Rückgabetyp überlastet sind?

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich brauche eine Art zu schaffen, die zwei Objekte mit dem gleichen Namen hat, und unterscheiden sich nur auf Rückgabetyp. Dynamisch diese Art emittierende über Reflexion durchaus akzeptabel ist.

So etwas wie folgt aus:

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

Ich verstehe, dass ich nicht diese Eigenschaft von C # verbrauchen oder VB.NET oder vielen anderen .NET-Sprachen.

Antworten zu verhindern, die ich erklären, warum ich will nicht, dies zu tun, lassen Sie mich erklären, warum ich es brauche: Ich brauche es einen Fehler zu reproduzieren

.

Genauer gesagt habe ich einen Fehler in AutoFixture wo ein Moq eines Typs verursacht es eine Ausnahme in bestimmten Fällen zu werfen. Das Problem ist, dass der Typ emittiert von Moq enthält zwei Eigenschaften die beide den Namen ‚Mock‘, die nur auf dem Rückgabetyp unterscheiden.

Ich möchte dieses Szenario in einer Unit-Test reproduzieren, aber ich möchte lieber nicht eine Abhängigkeit von Moq nehmen nur für diesen einzigen Grund, so ich mag würde das Verhalten intern in der Testsuite zu reproduzieren.

War es hilfreich?

Lösung

können Sie haben zwei Objekte mit dem gleichen Namen, die nur von der Art unterscheiden, und Sie können dies tun, ohne den Typen dynamisch emittierenden:

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);
    }
}

Die Ausgabe dieses Codes wird sein:

  

X: System.Int32
  X: System.String

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top