Расширяется конверсионный оператор VB.NET - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть класс с именем Foo с такими свойствами:

Public Class Foo(Of T)
    public Property Value as T
    public Property Bar as Boolean  
End Class

У меня перегрузка функции преобразования типов:

 Public Shared Narrowing Operator CType(ins As [Foo](Of T)) As T
     Return ins.Value
 End Operator
 Public Shared Widening Operator CType(prop As T) As [Foo](Of T)
     Return New Foo(Of T) With {.Value = prop}
 End Operator

Я использую свой класс следующим образом:

private Sub someSub()
   Dim f as new Foo(of String)
   f.Bar = True
   f = "This is The Text"
   // when doing this I lose the `Bar` beacuase of `Return New Foo(Of T) With {.Value = rightSide}` on `Widening` overload
End Sub

есть ли способ сохранить другие свойства класса?

1 Ответ

0 голосов
/ 22 ноября 2018

Как это может быть?Когда вы присваиваете f, вы создаете новый объект Foo(Of T), который ничего не знает о свойстве Bar объекта, уже назначенного этой переменной.Вам нужно установить свойство Bar нового объекта внутри оператора, но он ничего не знает о переменной, которой вы присваиваете результат, поэтому он также не может получить это значение.Чтобы сохранить это значение свойства, вы должны сначала получить его, и у вас нет другого способа получить его, кроме очевидного ручного извлечения заранее и ручного сброса после этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...