Tal*_*Tal 41 vb.net global-variables
如何在Visual Basic中声明全局变量?
需要从所有Visual Basic表单中访问这些变量.我知道如何为特定表单声明一个公共变量,但是如何为我项目中的所有表单执行此操作?
Cod*_*ray 74
没有办法声明全局变量,因为你可能在VB.NET中想象它们.
您可以做的(正如其他一些答案所建议的那样)是将您想要作为全局变量处理的所有内容声明为静态变量,而不是在一个特定的类中:
Public Class GlobalVariables
Public Shared UserName As String = "Tim Johnson"
Public Shared UserAge As Integer = 39
End Class
Run Code Online (Sandbox Code Playgroud)
但是,您需要在代码中的任何位置完全限定对这些变量的所有引用.从这个意义上讲,它们不是您可能从其他语言中熟悉的全局变量类型,因为它们仍然与某个特定类相关联.
例如,如果要在表单的代码中显示带有用户名的消息框,则必须执行以下操作:
Public Class Form1: Inherits Form
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
MessageBox.Show("Hello, " & GlobalVariables.UserName)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
您不能通过UserName在定义它的类之外键入来简单地访问变量- 您还必须指定定义它的类的名称.
如果完全限定变量的做法因任何原因而恐吓或扰乱你,你总是可以GlobalVariables在每个代码文件的顶部导入包含全局变量声明的类(这里)(甚至在项目级别,在项目的属性窗口).然后,您可以简单地通过名称引用变量.
Imports GlobalVariables
Run Code Online (Sandbox Code Playgroud)
请注意,当您在a中声明全局变量而不是a 时,这与幕后编译器为您做的完全相同.在VB.NET中,它提供了与以前版本的VB向后兼容的模块,它只是一个密封的静态类(或者,在VB.NET术语中).IDE允许您从模块中调用成员,而无需完全限定或导入对它们的引用.即使您决定走这条路,也值得了解VB.NET等面向对象语言背后的情况.我认为作为一名程序员,即使您决定使用它们,了解正在发生的事情以及您的工具究竟为您做了什么也很重要.对于它的价值,我不建议将其作为"最佳实践",因为我觉得它倾向于默默无闻,并且干净的面向对象的代码/设计.如果编写如上所示的C#程序员将更好地理解你的代码,而不是将它塞进模块并让编译器处理所有内容.ModuleClassModuleShared NotInheritable Class
请注意,至少有一个其他答案提到,VB.NET是一种完全面向对象的语言.这意味着,除其他外,一切都是一个对象.甚至"全局"变量也必须在类的实例中定义,因为它们也是对象.每当您觉得需要在面向对象语言中使用全局变量时,您需要重新考虑您的设计.如果你只是转向面向对象的编程,那么在进一步编写代码之前,停下来学习一些基本模式是值得的.
RBa*_*ung 21
与您总是一样的方式,使用"模块"而不是类,只使用"公共"而不是旧的"全局"关键字:
Public Module Module1
Public Foo As Integer
End Module
Run Code Online (Sandbox Code Playgroud)
小智 6
好的.我终于找到了真正有效的方法来回答似乎被问到的问题;
"当需要许多模块和表单时,如何声明变量对所有模块都公开,以便它们各自引用相同的变量?"
令我惊讶的是,我花了相当多的时间在网上搜索这个看似简单的问题,除了模糊之外什么也没发现,这让我仍然遇到错误.
但是由于Cody Gray与一个例子的联系,我能够辨别出一个正确的答案;
情况 ; 您有多个模块和/或表单,并希望从每个或所有引用特定变量.
"一种"有效的方式; 在一个模块上放置以下代码(其中"DefineGlobals"是任意选择的名称);
Public Module DefineGlobals
Public Parts As Integer 'Assembled-particle count
Public FirstPrtAff As Long 'Addr into Link List
End Module
Run Code Online (Sandbox Code Playgroud)
然后在需要处理变量"Parts"的每个模块/表单中,放置以下代码(作为"InitForm2"表单的示例);
Public Class InitForm2
Private Sub InitForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Parts = Parts + 3
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
也许是另一种形式; 公共类FormX
Sub CreateAff()
Parts = 1000
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
这种类型的编码似乎已经在我的VB2008 Express上运行了,而且似乎现在都需要(没有任何未知文件在后台加载),即使我找不到"哦顺便说一句......"的惊喜细节.而且我确信更高程度的标准化会更受欢迎,但第一项任务就是让所有工作都有效,无论是否有标准.
没有什么比明确的,措辞好的,明确的例子更好.
再次感谢,科迪
使其静态(在 VB 中共享)。
Public Class Form1
Public Shared SomeValue As Integer = 5
End Class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
332659 次 |
| 最近记录: |