現在のバージョンのMVVM Lightには、という名前のヘルパー関数Set
があります。継承ViewModelクラスは、1回の呼び出しでプロパティ値の変更と変更通知の呼び出しを呼び出します。新しいNameOf
演算子と一緒にすると、これによりプロパティのボイラープレートコードがはるかに小さくなります。VB.NETはオーバーロードされた関数を区別できません
問題はしかしSet
機能が過負荷と3つの過負荷の外に、以下の2つのオーバーロードはVB.NETを怒られていることである。
Protected Function [Set](Of T)(propertyName As String, ByRef field As T, newValue As T) As Boolean
Protected Function [Set](Of T)(ByRef field As T, newValue As T, <CallerMemberName> Optional propertyName As String = Nothing) As Boolean
あなたはString
typeプロパティを持っている場合は、VB.NET私たちが呼んでいる過負荷を区別することはできません。
'[設定]' はアクセスがこれらの引数のための最も具体的ではありませんので、オーバーロードの解決に失敗しました:
「保護されたオーバーロード関数(列の)[設定](文字列propertyNameの、ByRefのフィールドのString、newValueにとして、文字列として)As Boolean ':最も具体的なものではありません。
'Protectedオーバーロード機能[設定](Of String)(ByRefフィールドはString、newValueはString、[propertyName As String = Nothing])はブール値です。
ref
キーワードを使用すると、C#でこの状況を簡単に処理できることに注意してください。また、現在の状況はMVVM Lightに関連していますが、問題自体は一般的です。名前付きのパラメータも使用しようとしましたが、どちらも役に立ちません。これがどのように解決できるかについてのヒントは?
回避策は、独自の構造体を作成して、演算子をプライベート 'String'フィールドと照合するようにオーバーライドすることです。 –