2009-10-02 7 views
11

Devo creare un tipo che abbia due proprietà con lo stesso nome e differisca solo sul tipo restituito. Emettere dinamicamente questo tipo tramite la riflessione è perfettamente accettabile.Come posso emettere un tipo .NET con due proprietà che sono sovraccaricate solo sul tipo restituito?

Qualcosa di simile a questo:

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

io capisco che non posso consumare questo immobile dal C# o VB.NET o un sacco di altri linguaggi .NET.

Per evitare risposte che mi spiegano perché non voglio farlo, lascia che ti spieghi perché ne ho bisogno: ne ho bisogno per riprodurre un bug.

In particolare, ho un bug in AutoFixture in cui un Moq di un tipo causerà il lancio di un'eccezione in alcuni casi. Il problema è che il tipo emesso da Moq contiene due proprietà entrambe denominate "Mock" che si differenziano solo per il tipo restituito.

Vorrei riprodurre questo scenario in un test di unità, ma preferirei non prendere una dipendenza da Moq solo per quella singola ragione, quindi mi piacerebbe riprodurre il comportamento internamente nella suite di test.

+6

+1 per dare validi motivi per quello che altrimenti sarebbe "piede, scopo, sh oot "tipo di materiale :) –

risposta

14

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

L'uscita di questo codice sarà:

X: System.Int32
X: System.String

+0

Questo era esattamente ciò di cui avevo bisogno per riprodurre il bug. Molte grazie :) –

Problemi correlati