我目前正在开发一个Web应用程序(ASP.NET),其中包含的一些页面是由其他程序员创建的,我注意到的是,他们没有使用“Me(VB.NET)”关键字来访问控制,而在我身边,我在我创建的每个页面中都使用它。只是为了提供更多信息,Web应用程序在.NET Framework 2.0上运行。有没有人会帮助我理解它是否需要使用我?如果您使用我,整个代码有哪些优缺点?它能改善应用程序的性能吗?
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:16)
据我所知,它纯粹是偏好,但可以消除属性和本地范围的变量/参数之间的歧义。有些人出于习惯而在宗教上包含它。这样,如果他们要引入一个同名的局部变量,那么什么都不会破坏。
假设您定义了一个方法DoSomething(MyString As String)
,并且该类还有一个名为String
的{{1}}。引用MyString
的类版本的唯一方法是使用MyString
。因此,您说Me.MyString
并且编译器知道您想要什么。
答案 1 :(得分:6)
在某些情况下,它是必需的,让我们以类的范围内的变量为例,并将参数传递给具有等效名称的子例程,如下所示:
Private theString As String
Private Sub Setup(ByVal theString As String)
Me.theString = theString
End Sub
它将事物带入正确的上下文,以便正确执行任务。
在你的情况下,一些开发人员倾向于这样做,因此他们知道变量的来源,我的工作伙伴也会这样做。这也是常见的,因为当他们输入“我”时,intellisense会显示他们的本地变量列表,这是我通常不会做的事情,尽管我可能应该做更多。
答案 2 :(得分:3)
使用 Me关键字不会影响效果。这纯粹是一种风格问题。我认为如果您使用它,它可以提高代码的清晰度。所以你第一眼就知道所使用的成员属于对象本身而且它不是一个局部变量。
只要我们希望代码引用当前对象中的成员(方法,属性,...),就会使用Me关键字。 Me关键字类似于C ++和C#语言中的 this关键字。 Me关键字通常是可选,因为除非另有明确说明,否则任何方法调用都会被假定为引用当前对象。
例外情况是您使用阴影变量。阴影变量是过程级别的变量,其名称与类的变量相同。例如:
Public Class ExampleClass
Private FirstName As String
Public Sub ExampleMethod()
Dim FirstName As String
FirstName = "Stefan"
End Sub
End Class
变量FirstName在类级别和ExampleMethod方法中声明。在ExampleMethod中,除非我们使用Me关键字显式引用类级变量,否则仅使用本地或阴影变量:
Public Class ExampleClass
Private FirstName As String
Public Sub ExampleMethod()
Dim FirstName As String
FirstName = "Stefan"
Me.FirstName = "Carl Gustav"
End Sub
End Class
答案 3 :(得分:1)
我认为UI控件非常符合用户的偏好。
但我非常喜欢使用“Me”,特别是如果您正在使用类属性,以防万一在访问该变量之前需要执行某些代码。
实施例
Class Sample
Private myString as String
Public Property GetMyString As String
Get
' Some code here which sets the string after reading value from the database
End Get
Set
End Set
End Property
End Class
在这种情况下,使用或不使用“Me”关键字时会有区别。
答案 4 :(得分:1)
Me关键字是可选的,就像您可以选择完全限定命名空间一样,即使您已将其导入到类的顶部。
但是,如果表单上的控件与另一个导入的命名空间中的另一个对象具有相同的名称,那么它可能是必不可少的。
答案 5 :(得分:1)
好吧,即使它有东西,也有这个ME关键字提供问题的事件
例如,如果您有一个表单,并从其他表单调用它,如
Dim myform as new frmXXX
myform.PrimaryKey=123
muform.show
除非Show方法完成,否则primarykey方法中的对象没有引用ME关键字,并且它们提供错误。
在PrimaryKey方法中 property writeonly primarykey 设置....
me.txtPrimaryKey.text="value"
除非表格未显示,否则将提供错误。
答案 6 :(得分:0)
我是当前班级的对象