Qual è il modo migliore per accedere alle proprietà della stessa classe, tramite le funzioni di accesso o direttamente?[chiuso]
-
21-08-2019 - |
Domanda
Questo è qualcosa che io non sono molto costante e sempre curioso di sapere cosa fanno le altre persone.
Come fare per accedere all'interno delle proprietà (pubblica o privata)?
Per esempio hai questa proprietà :
Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Nella stessa classe all'interno di un'altra funzione che preferisci?e perché?
_Name = "Johnny"
o
Name = "Johnny"
Ignorare il fatto che ho usato il Nome invece di Me.Nome.
Soluzione
Personalmente preferisco usare la proprietà, dove possibile.Questo significa che è ancora ottenere la convalida, e si può facilmente mettere i punti di interruzione sulla proprietà di accesso.Questo non di lavoro in cui si sta cercando di fare una modifica a due proprietà che convalidare una contro l'altra - per esempio, un "min e max di coppia", dove ognuno ha un vincolo di convalida tale che min <= max
in tutti i tempi.Si potrebbe avere (C#):
public void SetMinMax(int min, int max)
{
if (max > min)
{
throw new ArgumentOutOfRangeException("max";
}
// We're okay now - no need to validate, so go straight to fields
this.min = min;
this.max = max;
}
A un certo punto, in futuro, mi piacerebbe vedere C# acquisire la capacità di dichiarare il campo di backup all'interno della proprietà, in modo che sia privata di solo proprietà:
public string Name
{
string name;
get { return name; }
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
name = value;
}
}
Al di fuori della proprietà, non sarebbe in grado di arrivare a name
solo Name
.Abbiamo già questo per proprietà implementata automaticamente, ma non possono contenere qualsiasi logica.
Altri suggerimenti
Direi
Name = "Johnny"
Il motivo è che potrei avere alcune convalida (o trigger, o lazy initialization, o...), o potrebbero, in seguito, decidere di inserire alcuni convalida, quando si assegna un Nome e voglio essere sicuro per attivare il codice.
Io preferisco:
Name = "Johny"
Per me, il motivo è abbastanza semplice, se succede qualcosa di brutto con _Name, si può sempre mettere qualche uscita in getter/setter e scoprire che cosa sta causando i problemi.
Questo è molto interessante, penso che la maggior parte della gente che fa quello che faccio io
Me.Name = "Johnny"
o
Name = "Johnny"
Tuttavia, la maggior parte dei progetti che ho visto utilizzando
_Name = "Jonny"
stile.Che ho pensato che era una cattiva idea, e grazie per le risposte di cui avete confermato.Anche la maggior parte delle auto-codice codice generato da diversi strumenti utilizza l'accesso diretto.
C'è un calo di prestazioni?O è il compilatore ottimizza quando non c'è nessun codice aggiuntivo a impostare o ottenere.
Utilizzare la proprietà (Name).Credo che la proprietà deve essere unico "proprietario" di fondo campo (_name).
Vantaggi di incapsulamento di campo sotto una proprietà:
- Leggibilità:Solo una regione di codice in cui _name è cambiato o trasformati prima restituito.
- Facile da impostare un punto di rottura, debug etc.
- SECCO:Nessun codice ripetuto quanto riguarda la validazione e l'elaborazione è interessato.
- Cambiare la resilienza:Cambiando la validazione e l'elaborazione non influenzerà il codice utilizzando proprietà.