2009-10-02 3 views
11

같은 이름의 두 속성이있는 형식을 만들어야하며 반환 형식 만 다릅니다. 반사를 통해이 유형을 동적으로 방출하는 것은 완벽하게 허용됩니다. 이 같은반환 형식에서만 오버로드되는 두 가지 속성이있는 .NET 형식을 어떻게 내 보낼 수 있습니까?

뭔가 :

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

은 내가 C# 또는 VB.NET 또는 다른 .NET 언어를 많이에서이 속성을 소비 할 수 있음을 이해한다.

왜 이렇게하고 싶지 않은지 설명하는 답변을 막으려면, 왜 내가 필요한지 설명해주십시오. 버그를 재현 할 필요가 있습니다.

특히 AutoFixture에 버그가 있는데, Moq 유형의 경우 특정 상황에서 예외가 발생합니다. 문제는 Moq에 의해 생성 된 타입이 리턴 타입에서만 다른 'Mock'이라는 두 개의 프라퍼티를 포함한다는 것이다.

단위 테스트에서이 시나리오를 재현하고 싶습니다.하지만 그 단일 이유 때문에 Moq에 대한 종속성을 취하지 않기 때문에 테스트 스위트에서 내부적으로 동작을 재현하고 싶습니다.

+6

하나를 선택 System.String "발, 쉬, 목표 oot "타입의 자료를 가지고있다. –

답변

14

당신은 유형 만 다른 동일한 이름을 가진 두 속성을 가질 수 있고 당신이 할 수있는 동적 유형을 방출하지 않고 있음 :

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 : 그렇지 않으면 어떻게 될지에 대한 타당한 이유를주는

+0

그 버그를 재현 할 필요가 있었는데 그게 사실이었다. 고마워요 :) –