2012-07-03 53 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'在事件处理程序中将被视为'object'。 –

+0

似乎不受歧义问题等,也许只是作者的偏好。 – user7116

回答

6

如果你通过Reflector查看代码,你总会看到这样的奇怪的东西,因为Visual Studio允许你使用编译器的捷径为你工作,就像传递一个类型作为对象而不需要将它转换为对象。

但是,为了回答你的问题,该事件处理程序需要一个对象,所以它传递this(object)

+0

你是对的,我已经从codeplex检查了源代码,并且演员没有出现!实际上,Resharper通过反射来重新生成代码,我认为源代码是从原来的 –

+0

下载的。所以,反射器的目标是在生成的代码中显示一个转换? – VS1

+1

@CSharpVJ - 反射器只是显示编译代码的样子。它不会决定是否需要演员阵容。编译器做出这些决定,但允许开发人员在源代码中省略它们。 –

2

的优势,这样做可能是因为有changedEventHandler方法的一个或多个过载和类型this通常会调用更具体的过载,但在这种情况下,调用者希望确保选择object过载。

这是一个假设性的猜想 - 它可能或可能不是真正的原因。 :-)

+0

'changedEventHandler'是一个委托,我不认为可能有重载。 – Lukazoid

+0

@Lukazoid - 好点。如果这是一种常规方法,那将是一个很好的答案,但我想我的假设只是冒了出来。 :-) – Enigmativity