2012-07-03 3 views
4

나는 MvvmLight의 소스 코드를 읽고 있었다, 나는 ViewModelBase.cs에서이 기능을 본 적이 :.NET 개체를 개체로 캐스팅하는 것이 목표는 무엇입니까?

protected virtual void RaisePropertyChanged(string propertyName) 
{ 
    PropertyChangedEventHandler changedEventHandler = this.PropertyChanged; 
    if (changedEventHandler == null) 
     return; 
    changedEventHandler((object) this, new PropertyChangedEventArgs(propertyName)); 
} 

캐스트 여기가 왜 표시되지 않습니다,하지만이 기능은 MvvmLight 중요하기 때문에 나는 그렇게하고있는 이점이 있다고 생각하고있다.

+5

독자가 'this'가 이벤트 처리기에서 '객체'로 처리된다는 것을 분명히 알 수 있습니다. –

+0

모호성 문제 등의 영향을받지 않는 것 같습니다. 아마도 저자의 취향 일 것입니다. – user7116

답변

6

Reflector을 통해 코드를 살펴보면 Visual Studio는 컴파일러가 바로 가기를 수행 할 수 있기 때문에 항상 이상한 것을 보게된다. 형식을 객체로 전달하지 않고 객체를 객체로 전달하는 등의 작업을 수행합니다. 귀하의 질문에 대답하는 그러나

는 이벤트 핸들러는 객체가 필요합니다, 그래서 하나 이상의 changedEventHandler 방법의 오버로드와의 종류가 있기 때문에가 될 수이 을 수행하기위한 this

+0

맞아, 내가 codeplex에서 소스 코드를 확인하고, 캐스트가 나타나지 않습니다! 실제로 Resharper는 리플렉션을 통해 코드를 재생성합니다. 소스 코드가 원본에서 다운로드되었다고 생각합니다. –

+0

그래서 생성 된 코드에서 캐스트를 표시하는 '리플렉터'의 목표는 무엇입니까? – VS1

+1

@CSharpVJ - 반사경은 컴파일 된 코드가 어떻게 보이는지 간단하게 보여줍니다. 캐스트가 필요한지 여부는 결정하지 않습니다. 컴파일러는 이러한 결정을 내리지 만 개발자가 소스에서이를 생략 할 수 있습니다. –

2

(object) 등의 장점을 전달 this은 일반적으로보다 구체적인 과부하를 호출하지만이 경우 호출자는 object 오버로드가 선택되도록하고 싶습니다.

이것은 가상의 추측이며 실제 이유가 아닐 수도 있습니다. :-)

+0

'changedEventHandler'는 델리게이트입니다. 오버로드가 발생할 것으로 생각하지 않았습니다. – Lukazoid

+0

@ 루카 조이도 - 좋은 지적입니다. 그것은 정기적 인 방법이라면 좋은 대답이 될 것입니다.하지만 제 가설이 연기에 들어선 것 같아요. :-) – Enigmativity

관련 문제