Comment puis-je émettre un type .NET avec deux propriétés qui sont surchargées uniquement sur le type de retour?

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

  •  19-09-2019
  •  | 
  •  

Question

Je dois créer un type qui a deux propriétés avec le même nom, et ne diffèrent que sur le type de retour. d'émission de ce type de façon dynamique par l'intermédiaire de la réflexion est tout à fait acceptable.

Quelque chose comme ceci:

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

Je comprends que je ne peux pas consommer cette propriété de C # ou VB.NET ou beaucoup d'autres langages .NET.

Pour éviter des réponses qui me expliquer pourquoi je ne veux pas faire cela, laissez-moi vous expliquer pourquoi je en ai besoin. Je besoin de reproduire un bug

Plus précisément, j'ai un bogue dans AutoFixture a Moq d'un type entraînera à lancer une exception dans certains cas. Le problème est que le type émis par Moq contient deux propriétés à la fois le nom « Mock » qui ne diffèrent que sur le type de retour.

Je voudrais reproduire ce scénario dans un test unitaire, mais je prendrais plutôt pas une dépendance à l'égard Moq juste pour cette seule raison, je voudrais reproduire le comportement en interne dans la suite de tests.

Était-ce utile?

La solution

Vous pouvez avoir 2 propriétés avec le même nom qui ne diffèrent que par le type, et vous pouvez le faire sans émettre de façon dynamique le type:

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

La sortie de ce code sera:

  

X: System.Int32
  X: System.String

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top