2009-10-02 19 views
11

我需要創建一個具有兩個具有相同名稱的屬性的類型,並且僅在返回類型上有所不同。通過反射動態發射這種類型是完全可以接受的。我怎樣才能發射一個.NET類型的兩個屬性只在返回類型上重載?

事情是這樣的:

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

我也明白,我不能消耗從C#或VB.NET或許多其他.NET語言的這個屬性。

爲了防止向我解釋爲什麼我不想這樣做的答案,讓我解釋爲什麼我需要它:我需要它來重現一個錯誤。

更具體地說,我在AutoFixture中有一個錯誤,其中某個類型的Moq會在某些情況下導致它拋出異常。問題是由Moq發出的類型包含兩個名爲'Mock'的屬性,它們僅在返回類型上有所不同。

我想在單元測試中重現這種情況,但我寧願不僅僅因爲單一的原因而依賴於Moq,所以我想在測試套件的內部再現行爲。

+6

+1賦予的正當理由,否則這將是「足,目標,SH或「材料類型:) –

回答

14

你可以有2個特性具有僅是類型不同的相同的名稱,你可以做,沒有動態發光類型:

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:System.Int32
X:System.String

+0

這是我重現錯誤所需要的。非常感謝 :) –

相關問題