Domanda

C'è un benifit di utilizzare:

private var _someProp:String;

public function set someProp(value:String):void
{
    _someProp = value;
}
public function get someProp():String
{
    return _someProp;
}

A differenza usando solo:

public var someProp:String;

Mi rendo conto utilizzando getter / setter può essere utile quando è necessario per favorire l'elaborazione o la necessità di essere informati di quando la proprietà viene modificata in questo modo:

public function set someProp(value:String):void
{
    _someProp = value;
    _somePropChanged = true;
    doSomethingElse();
}

Ma se non avete bisogno di questo, allora v'è alcuna ragione per usare getter / setter sopra solo utilizzando una var pubblico?

Grazie !!

È stato utile?

Soluzione

A seconda della lingua, si dovrebbe preferire getter / setter in anticipo perché non è possibile introdurre in un secondo momento (sto guardando a voi, Java) se si scopre che ne hanno bisogno.

Altri suggerimenti

Questo dipende davvero un po 'sul linguaggio / framework / toolkit si utilizza -

Tuttavia, vi sono spesso vantaggi quando utilizza getter e setter relativi alla versione ed compatibilità API. Questo può essere un motivo molto utile per loro, tutti usare da solo.

Questa realtà non può essere risolta senza conoscere la lingua. Getter e setter costano di più nella maggior parte delle lingue, ma si acquista flessibilità lungo la strada. In alcune lingue non è possibile modificare un pubblico ad un getter / setter senza modificare il codice nei chiamanti perché i cambiamenti di sintassi uso. Ma questo non è un problema con C #, che ciò che scrivo in gran parte.

getter e setter consentono di fare la convalida dei parametri. Essi consentono di ritardare la creazione di oggetti fino primo riferimento. Hanno un sacco di vantaggi, e li usano ogni volta che ho bisogno di uno di quei vantaggi fin dall'inizio.

Ma io uso getter e setter solo quando ne ho bisogno subito, o quando sono abbastanza sicuro che ho intenzione di bisogno della flessibilità. In caso contrario, li ho vista come gonfiare.

Come nota a margine, si può iniziare con una var pubblico e, se necessario convertirlo in un getter / setter più avanti nel codice .. a seconda della lingua che si sta utilizzando.

Se la vostra proprietà è totalmente muto, e non ha effetti collaterali sul resto della classe -. Poi con tutti i mezzi basta esporre come un campo pubblico

Il suo solo che in molti casi le proprietà di avere effetti collaterali, quindi è necessario controllare il modo in cui sono impostati e accessibili.

Come esempio banale, che cosa succede se la vostra variabile pubblica non è impostata su qualcosa nel costruttore? Stai bene con questo essere restituito come nulla? Oppure volete impostare questa variabile per qualcosa piuttosto che restituire null? Questo è un semplice esempio in cui un getter personalizzato vale la pena.

getter e setter anche dare un maggiore controllo su quali valori la variabile può essere impostata.

bool setAge(int age){
   bol retVal = true;

   if(age <= 0)
       retVal = false;

   return retVal;
}

Senza il setter, il valore potrebbe essere impostato a zero e le cose cattive potrebbe accadere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top