반환 유형에 오버로드 된 두 개의 속성이있는 .NET 유형을 어떻게 방출 할 수 있습니까?

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

  •  19-09-2019
  •  | 
  •  

문제

동일한 이름을 가진 두 개의 속성을 가진 유형을 만들고 반환 유형에만 다릅니다. 반사를 통해이 유형을 동적으로 방출하는 것은 완벽하게 허용됩니다.

이 같은:

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

C# 또는 vb.net 또는 기타 .NET 언어 에서이 속성을 소비 할 수 없다는 것을 이해합니다.

왜 내가 이것을하고 싶지 않은지 설명하는 답을 방지하려면 왜 필요한지 설명하겠습니다. 버그를 재현해야합니다.

보다 구체적으로, 나는 버그가 있습니다 autofixture 여기서 a 모크 유형의 경우 어떤 경우에는 예외가 발생합니다. 문제는 MOQ에 의해 방출 된 유형에는 리턴 유형에서만 다른 'mock'이라는 두 가지 속성이 포함되어 있다는 것입니다.

이 시나리오를 단위 테스트에서 재현하고 싶지만 그 이유 때문에 MOQ에 의존하지 않기 때문에 테스트 스위트에서 내부적으로 동작을 재현하고 싶습니다.

도움이 되었습니까?

해결책

유형에 의해서만 다른 이름을 가진 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top