Qual è il modo migliore per accedere alle proprietà della stessa classe, tramite le funzioni di accesso o direttamente?[chiuso]

StackOverflow https://stackoverflow.com/questions/355787

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.

È stato utile?

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à.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top