我曾在工作中询问过我的同事,甚至试图在互联网上查询,但我一直无法得到答案。
之间有什么区别
Public Property Name As String
和
Public Property Name() As String
在属性名称后添加()有什么区别?
答案 0 :(得分:5)
首先,您可能会发现Property与Method有许多相似之处。 从这个预期的,用于参数的属性中的括号。如果属性没有参数,则可以省略它。以下是完整的属性声明语法:
[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
[AccessLevel] Get
' Statements of the Get procedure.
' The following statement returns an expression as the property's value.
Return Expression
End Get
[AccessLevel] Set[(ByVal NewValue As DataType)]
' Statements of the Set procedure.
' The following statement assigns newvalue as the property's value.
LValue = NewValue
End Set
End Property
您可以在以下链接中找到有价值的提示: What is the difference between a parameterized property and function in vb.net? 和 https://msdn.microsoft.com/en-us/library/e8ae41a4.aspx
答案 1 :(得分:3)
您在VB.NET Language Specification中查找了这些详细信息。这是一个非常正式的文件,但仍然很可读。第9.7章包含有关Property关键字语法的所有详细信息。你可以看一下:
PropertySignature ::=
Property Identifier [ OpenParenthesis [ ParameterList ] CloseParenthesis ]
[ As [ Attributes ] TypeName ]
[]括号表示语法的可选部分。因此,如果属性不带任何参数,您可以很容易地看到 使用。换句话说,当它不是索引属性时。
所以没有区别。
答案 2 :(得分:0)
根据在线语言参考here,需要使用括号:
new user
尽管我们知道,只要没有参数,也可以在不改变含义的情况下将其省略。
但是,引用属性时有一个重要的区别。如果您有一个重载的属性,而一个重载的参数引用一个不带参数的重载,则在无参数重载的调用中必须使用括号,否则解析为对self的调用,将不返回任何内容。
即在以下代码中,第17行上有一个“未初始化的”警告:Property name ( [ parameterlist ] )
,它在运行时生成空引用异常。
如果将括号添加到两个“递归”调用中,即Return MyProp.ToUpper()
,它将按预期工作。
MyProp()