#.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
объявления за пределы этого метода. Как поля в основном классе.