Domanda

Qualcuno potrebbe spiegarmi il concetto di proprietà Get e Set?Non mi riesce proprio di capirlo.

È stato utile?

Soluzione

Questo non è un concetto originario di vb.net.Fa parte del framework .net e oop.Per farla breve è semplicemente il modo in cui un cliente usa/interagisce con l'oggetto per costringerlo a seguire un particolare modello di utilizzo.È un modo di leggere/impostare i valori dei membri/variabili privati ​​dopo un livello in cui è possibile implementare una certa logica.Per es.nell'implementazione setter di una classe chiamata Account.Diciamo che ha una proprietà chiamata Balance che è di tipo stringa (ad esempio sake), ma ha solo valori numerici.

Dim acc as New Account("CustID-1234")
acc.Balance = "1234" 'This is valid
acc.Balance = "Ten thousand" 'this is wrong

Quindi, per fornire coerenza nei dati di un oggetto (durante la lettura/impostazione) abbiamo getter e setter risp.

Ora il setter per la classe precedente può essere scritto in questo modo:

Public Class Account
    '...Var dec
    Public Property Balance() As String
        Get
            Return m_iBal.ToString()
        Set (value As String)
            Dim i As Integer
            If Integer.TryParse(value, i) Then
                m_Bal = i
            Else
                'You can throw a nasty error
            End If
    End Property

End Class

Altri suggerimenti

Non uso Visual Basic, ma il principio funziona in questo modo:

Hai una private variabile nella tua classe, chiamiamola myNumber (che sarebbe un tipo numerico). Non vuoi consentire public l'accesso a questa variabile per qualsiasi motivo.

Dovresti creare un metodo get e set per questa variabile (chiamato anche metodi di accesso e mutatore) che avrebbe un livello di accesso pubblico. Ciò ti consentirà un maggiore controllo sulla modalità di impostazione o recupero del valore. Ecco alcuni pseudocodici:

getMyNumber(){
     return myNumber;
}
setMyNumber(value){
     if(value > 0){
         myNumber = value;
     }
}

Con questo metodo setter, puoi assicurarti che <=> non possa mai essere impostato su 0 o su un valore negativo (ad esempio).

Ha senso?

I mutatori (setter) e gli accessori (getter) sono un modo subdolo per sovrascrivere l'operatore di assegnazione.Quindi, hai un campo pubblico, ClassroomSize.Puoi ottenere e impostare facilmente il suo valore:

int localVariable = 3000000;
MyClass.classroomSize = localVariable;
localVariable = MyClass.classroomSize;

Ma cosa succede se sai che l’intera scuola ha solo 300 sedie?Si utilizza un mutatore per limitare il valore di assegnazione a <= 300.Utilizzando il mutatore, non devi gravare l'utente della tua classe chiamando un SetClassroomSize(300) e consentirgli invece di assegnare la tua proprietà come un campo.

Questo è un pessimo esempio per renderlo breve.In verità, molto probabilmente vorrai generare un'eccezione quando le dimensioni della classe superano un valore ragionevole, anziché sovrascrivere tale valore.E lanciare eccezioni all'interno di un mutatore (o accessor) è una cattiva forma.Quindi, in questo caso, vorresti effettivamente creare un metodo SetClassroomSize().Ma hai capito.

Per quanto riguarda la creazione automatica che non fa altro che impostare e ottenere il campo privato della classe, hanno poco valore oltre a 1) possono essere visualizzati in controlli personalizzati, mentre il campo non può, 2) alcuni protocolli (COM/DCOM? ) li richiedono per l'assegnazione, 3) forniscono restrizioni di accesso (le proprietà ReadOnly e WriteOnly non hanno equivalenti nei campi), 4) sei mesi dopo, qualcuno dovrà convertire i campi pubblici in campi privati ​​e creare accessori e mutatori per tutti di loro e probabilmente imprecherai per aver dovuto fare il tuo lavoro ingrato.

La creazione di una proprietà con Get e Set accessori consente di creare funzioni che si comportano come una variabile.

Ad esempio, supponiamo che tu stia creando un UserControl con un'etichetta e desideri consentire alle persone che usano il controllo utente di ottenere e impostare il testo dell'etichetta, senza dare loro accesso all'etichetta stessa. (Nota che se lo volessero davvero, potrebbero accedervi tramite la Controls proprietà)

Puoi creare una coppia di metodi come GetLabelText e SetLabelText, che altre persone potrebbero chiamare per cambiare l'etichetta. Tuttavia, chiamare metodi del genere è imbarazzante. Ad esempio, se qualcuno volesse aggiungere la lettera A all'etichetta, dovrebbe fare qualcosa del genere: control.SetLabelText(control.GetLabelText() + "A"). Se si crea una proprietà LabelText, con = = con control.LabelText += "A" e Value accessori invece di <=> e <=>, possono semplicemente scrivere <=>.

Quando si scrive una proprietà, si scrivono gli accessori <=> e <=> come le normali funzioni. <=> non accetta parametri e restituisce il valore della proprietà e <=> accetta un nuovo valore per la proprietà come parametro nascosto chiamato <=> e non restituisce nulla.

Ad esempio:

Public Property LabelText
    Get
        Return label.Text
    End Get
    Set
        label.Text = value
    End Set
End Property

Hai una proprietà che può avere una combinazione di un getter e un setter. Il getter è il codice che viene eseguito quando leggi la proprietà. Questo codice deve restituire un valore. Il setter è il codice che viene eseguito quando si assegna a la proprietà.

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