.NET Framework 4.6.2 — 4.7.2

#.net #vb.net

#.net #vb.net

Вопрос:

Я попытался перенести библиотеку, предназначенную для .NET Framework 4.6.2, на 4.7.2.

При тестировании кода я получил исключение Class Exists в моем подразделе переопределения WndProc. Похоже, что, возможно, произошли изменения в способе обработки конструкторов. Вот сценарий, на котором основан мой вопрос…

 Public Sub New (arg1 as string)
    Me.New(arg1, arg2_DefaultValue)
End Sub

Public Sub New(arg1 as String, arg2 as Integer)
    MyBase.New
    <some processing>
End Sub
  

С 4.7.2 создается ли класс при первом вызове New или есть какая-то другая причина, по которой мне нужно найти исключение Class Exists при запуске кода с 4.7.2?

Большое спасибо за любую помощь или совет.

Вот мой код WndProc на случай, если он имеет отношение к делу…

 Protected Overrides Sub WndProc(ByRef m As Message)
    Const WM_NCLBUTTONDOWN As Integer = amp;HA1
    Const WM_NCLBUTTONUP As Integer = amp;HA2
    Const HTCLOSE As Integer = 20
    Select Case m.Msg
        Case WM_NCLBUTTONDOWN
            If CInt(m.WParam) = HTCLOSE Then
                Return
            End If
        Case WM_NCLBUTTONUP
            If CInt(m.WParam) = HTCLOSE Then
                MsClose.PerformClick()
                Return
            End If
    End Select
    MyBase.WndProc(m) ' Exception thrown here
End Sub
  

Комментарии:

1. У вас также есть пустой конструктор ( Public Sub New () )? Удалить MyBase.New .

2. Да, у меня есть Public Sub New() , который должен выдавать исключение. MyBase. Требуется создать, поскольку класс наследует форму.

3. Public Sub New() не должно ничего выбрасывать. MyBase.New не требуется. Конструктор базового класса вызывается в любом случае. Убедитесь, что у вас нет дубликатов WndProc .

4. Можете ли вы показать нам ТОЧНОЕ сообщение об исключении? Насколько я знаю, не существует такого понятия, как «Исключение класса существует».

5. Переместите все const объявления за пределы этого метода. Как поля в основном классе.