Vb.Net属性语法

时间:2015-04-08 12:11:23

标签: .net vb.net

我曾在工作中询问过我的同事,甚至试图在互联网上查询,但我一直无法得到答案。

之间有什么区别
Public Property Name As String

Public Property Name() As String

在属性名称后添加()有什么区别?

3 个答案:

答案 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()