4

私はMvvmLightのソースコードを読んでいて、ViewModelBase.csでこの関数を見ました。

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

ここにキャストがある理由はわかりませんが、この関数はMvvmLightで重要であるため、そうすることには利点があると思います...

4

2 に答える 2

6

ReflectorVisual Studio では、型をオブジェクトにキャストせずにオブジェクトとして渡すなど、コンパイラが自動的に実行するショートカットを使用できるため、コード全体を見ていると、常にこのような奇妙なものが表示されます。

しかし、あなたの質問に答えるには、イベントハンドラーにはオブジェクトが必要なので、次のように渡しthisます(object)

于 2012-07-03T12:04:32.860 に答える
2

これを行う利点は、メソッドの 1 つ以上のオーバーロードがchangedEventHandlerあり、の型thisが通常より具体的なオーバーロードを呼び出すためですが、この場合、呼び出し元はobjectオーバーロードが選択されていることを確認する必要があるためです。

これは仮説であり、実際の理由である場合とそうでない場合があります。:-)

于 2012-07-03T12:06:29.723 に答える