如何发出具有两个仅在返回类型上重载的属性的 .NET 类型?
-
19-09-2019 - |
题
我需要创建一个具有两个同名属性的类型,仅返回类型不同。通过反射动态发射这种类型是完全可以接受的。
像这样的东西:
public TypeA Prop { get; }
public TypeB Prop { get; }
我确实知道我无法从 C# 或 VB.NET 或许多其他 .NET 语言使用此属性。
为了防止答案向我解释为什么我不想这样做,让我解释一下为什么我需要它:我需要它来重现错误。
更具体地说,我有一个错误 汽车夹具 其中一个 起订量 某种类型的类型会导致它在某些情况下抛出异常。问题是 Moq 发出的类型包含两个名为“Mock”的属性,它们仅在返回类型上有所不同。
我想在单元测试中重现这种情况,但我不想仅仅因为这个原因就依赖 Moq,所以我想在测试套件内部重现该行为。
解决方案
您可以拥有两个同名的属性,仅类型不同,并且无需动态发出类型即可做到这一点:
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);
}
}
该代码的输出将是:
X :系统.Int32
X :系统字符串
不隶属于 StackOverflow