Comment puis-je émettre un type .NET avec deux propriétés qui sont surchargées uniquement sur le type de retour?
-
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.
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