You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET登录界面运行触发Stack overflow exception问题求助

问题排查与解决方案

嘿,我一眼就发现你踩了一个VB.NET新手常犯的小坑,直接导致了Stack Overflow Exception!咱们一步步拆解问题、解决问题:

1. 栈溢出的根本原因:属性无限递归

你写的Users类里的Name属性犯了一个关键错误——在Get/Set方法里直接访问属性本身,而非私有字段,这会触发无限递归调用:

Public Property Name() As String
Get
' 这里的Name是属性本身,调用Get会再次触发Get方法,无限循环
Return Name
End Get
Set(ByVal Value As String)
' 同理,给Name赋值会再次触发Set方法,无限循环
Name = Value
End Set
End Property

每次访问这个属性,都会反复调用自己的Get/Set逻辑,栈空间被不断消耗,最终抛出栈溢出异常。

2. 修正后的代码

我们需要给属性搭配一个对应的私有字段,让Get/Set方法操作这个字段,而不是属性本身:

Public Class Form1
    ' 修正后的Users类:添加私有字段存储属性值
    Private Class Users
        ' 私有字段,用于实际存储Name的值
        Private _name As String
        
        Public Property Name() As String
            Get
                ' 返回私有字段的值,而非属性本身
                Return _name
            End Get
            Set(ByVal Value As String)
                ' 给私有字段赋值,而非属性本身
                _name = Value
            End Set
        End Property
    End Class

    ' 示例按钮点击事件:测试输出
    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        ' 测试创建用户并输出
        Dim testUser As New Users()
        testUser.Name = "测试用户"
        
        ' 控制台输出(后面会说怎么看到这个输出)
        Console.WriteLine($"用户名称:{testUser.Name}")
        ' 或者用弹窗显示,更直观
        MessageBox.Show($"用户名称:{testUser.Name}", "登录测试")
    End Sub
End Class

3. 关于控制台输出的显示问题

在WinForms项目里,默认运行时不会弹出控制台窗口,所以你看不到Console.WriteLine的输出。有两种解决方式:

  • 方式一:修改项目属性
    右键你的项目 → 属性 → 应用程序 → 输出类型,选择“控制台应用程序”,这样运行时会同时弹出WinForms窗口和控制台窗口,就能看到输出了。
  • 方式二:用弹窗替代控制台输出
    直接用MessageBox.Show()方法(如上面代码示例),测试登录逻辑时更直观,不需要额外设置。

内容的提问来源于stack exchange,提问作者Matias Barrios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:25:20