Текущая версия MVVM Light имеет вспомогательную функцию с именем Set
в классе ObservableObject
, которую наследующий класс ViewModel может вызывать как изменение значения свойства, так и подмена уведомления об изменении в один вызов. Вместе с новым оператором 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
типа, VB.NET не может различать, какую перегрузку мы вызываем.
разрешение перегрузки не удалась, поскольку не доступны '[Set]' не является наиболее специфичным для этих аргументов:
«Защищенный Перегрузки Функция [Set] (Of String) (ИмениСвойства As String, ByRef поле As String, NEWVALUE As String) As Boolean ': Не самый конкретный.
Функция защищенных перегрузок [Set] (Of String) (поле ByRef As String, newValue As String, [propertyName As String = Nothing]) As Boolean ': Не более конкретно.
Обратите внимание, что C# может легко справиться с этой ситуацией, используя ключевое слово ref
. Кроме того, хотя текущая ситуация связана с MVVM Light, сама проблема является общей. Я также пытался использовать именованные параметры, но это тоже не помогает. Любые намеки на то, как это можно решить?
Обходным решением может быть создание вашей собственной структуры, где вы переопределяете операторы, чтобы они соответствовали частному полю 'String'. –