2015-04-08 13 views
5

Ho chiesto ai miei colleghi di lavorare e ho anche cercato di cercare questo su Internet ma non sono stato in grado di ottenere una risposta.Vb.Net Properties Sintassi

Qual è la differenza tra

Public Property Name As String 

e

Public Property Name() As String 

Che differenza rende l'aggiunta() dopo il nome della proprietà?

+2

Nessuna differenza. Inoltre, Visual Studio aggiungerà le parentesi per te. Rende solo la sintassi più uniforme. –

+1

@KonradRudolph - in realtà VS non aggiunge automaticamente queste parentesi semplicemente non le richiede (sono opzionali) –

+0

@MattWilko Hmm. Forse era solito? Sono passati> 5 anni dall'ultima volta che ho lavorato con VS. Naturalmente è anche possibile che io ricordi male, dato che VS sta/stava aggiungendo automaticamente parentesi in altri posti. –

risposta

5

Prima di tutto si può scoprire che la proprietà ha molte somiglianze con i metodi. da questa prospettiva, parentesi in Proprietà utilizzata per i parametri. se una proprietà non ha parametri, puoi ometterla. che segue è la sintassi completa dichiarazione di proprietà:

[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 

Si possono trovare preziosi consigli in seguenti link: What is the difference between a parameterized property and function in vb.net? E https://msdn.microsoft.com/en-us/library/e8ae41a4.aspx

2

si ricerca questo tipo di dettagli nella VB.NET Language Specification. È un documento piuttosto formale ma comunque abbastanza leggibile. Il capitolo 9.7 contiene tutti i dettagli sulla sintassi della parola chiave Property. Vedrai ad esempio:

PropertySignature ::= 
    Property Identifier [ OpenParenthesis [ ParameterList ] CloseParenthesis ] 
     [ As [ Attributes ] TypeName ] 

Le parentesi [] indicano le parti facoltative della sintassi. Quindi puoi facilmente vedere che non hai da usare() se la proprietà non accetta alcun parametro. In altre parole, quando non è una proprietà indicizzata.

Quindi non c'è differenza.

+0

Questo è il modo sbagliato di leggere le specifiche: '[...]' indica che la parte è opzionale, ma lo fa * non * indica che non ha alcun effetto In effetti, le altre parti in '[...]' nell'esempio sopra * do * hanno un effetto. –

+3

Ehm, ho solo detto "parti opzionali della sintassi". Ho evitato di dire qualcosa sugli effetti. Le specifiche del linguaggio sono buone per questo. –

+0

"Ho evitato di dire qualsiasi cosa sugli effetti" - quindi cosa è "quindi non c'è differenza"? –