Come posso emettere un tipo .NET con due proprietà che sono sovraccarichi solo sul tipo di ritorno?

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

  •  19-09-2019
  •  | 
  •  

Domanda

Ho bisogno di creare un tipo che ha due proprietà con lo stesso nome, e differiscono solo sul tipo di ritorno. Dinamicamente emettono questo tipo tramite riflessione è perfettamente accettabile.

Qualcosa di simile a questo:

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

Capisco che non riesco a consumare questo immobile dal C # o VB.NET o un sacco di altri linguaggi .NET.

Per evitare che le risposte che spiegano a me perché io non voglio fare questo, mi permetta di spiegare il motivo per cui ho bisogno:. Ho bisogno di riprodurre un bug

In particolare, ho un bug nel AutoFixture in cui un Moq di un tipo lo farà generare un'eccezione in alcuni casi. Il problema è che il tipo emessa da Moq contiene due proprietà sia chiamato 'Mock' che si differenziano solo dal tipo di ritorno.

Vorrei riprodurre questo scenario in un test di unità, ma preferisco non prendere una dipendenza da Moq solo per questo solo motivo, quindi mi piacerebbe riprodurre il comportamento internamente nel suite di test.

È stato utile?

Soluzione

Si possono avere 2 proprietà con lo stesso nome che differiscono solo per il tipo, e si può farlo senza emettere dinamicamente il tipo:

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

Il risultato di questo codice sarà:

  

X: System.Int32
  X: System.String

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top