Pergunta

Alguém poderia me explicar o conceito de obter e definir propriedade? Ele só não está afundando no para mim.

Foi útil?

Solução

Este não é um conceito nativo para vb.net. É parte da estrutura .net e oop. Para fazer uma longa história curta, é apenas a forma como um cliente usa / interage com o objeto, a fim de forçá-lo / la a seguir um determinado padrão de uso. É uma maneira de ler / definir valores dos membros / variáveis ??privadas depois de uma camada onde alguma lógica pode ser implementada. Por exemplo na implementação setter de uma classe chamada conta. Vamos dizer que ele tem uma propriedade chamada Balance que é de tipo de dados string (por exemplo causa), mas tem apenas valores numéricos.

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

Assim, para agradar a fornecer consistência nos dados de um objeto (enquanto qualquer leitura / configuração), temos getters e setters resp.

Agora, o setter para a classe acima pode ser escrito assim:

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

Outras dicas

Não uso Visual Basic, mas o princípio funciona assim:

Você tem uma variável private em sua classe, vamos chamá-lo myNumber (o que seria algum tipo numérico). Você não quer para permitir o acesso public a esta variável por qualquer motivo.

Você iria criar um get e um método set para esta variável (também chamado de assessor e métodos modificadores) que teria um nível de acesso do público. Isto irá permitir-lhe mais controle sobre como o valor é definido ou recuperado. Aqui está um pseudocódigo:

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

Com este método setter, você pode ter certeza de que myNumber nunca pode ser definido como 0 ou um valor negativo (por exemplo).

faz sentido?

Mutators (setters) e Accessors (getters) são uma maneira sorrateira de substituir o operador de atribuição. Então, você tem um campo público, classroomSize. Você pode obter e definir o seu valor facilmente:

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

Mas o que se conhece toda a escola só tem 300 cadeiras? Você usa um modificador de limitar o valor de atribuição para <= 300. Usando o modificador, você não tem a carga do usuário de sua classe com chamando um SetClassroomSize (300), e em vez disso lhes permitem atribuir sua propriedade como um campo.

Este é um mau exemplo para torná-lo breve. Na verdade, você provavelmente quer lançar uma exceção quando o tamanho da sala de aula ultrapassado um valor razoável, em vez de substituir esse valor. E lançar exceções dentro de um modificador (ou assessor) é uma forma ruim. Assim, neste caso, você realmente deseja criar um método SetClassroomSize (). Mas você começa a idéia.

Como para criação automática que não faz nada mais do set e get a classe campo privado, há pouco valor em si que não seja, 1) que pode ser exibido em controles personalizados, enquanto que o campo não pode, 2) alguns protocolos (COM / DCOM?) obrigá-los para a atribuição, 3) eles fornecem as restrições de acesso (somente leitura e WriteOnly propriedades não têm equivalente nos campos), 4) seis meses na estrada, alguém terá que converter seus campos públicos em campos privados e criar acessores e mutators para todos eles e provavelmente vai xingar por ter que fazer o seu trabalho penoso.

Fazendo uma propriedade com Get e Set acessores permite que você faça funções que se comportam como uma variável.

Por exemplo, digamos que você está fazendo um UserControl que tem um rótulo, e você quer deixar as pessoas que usam a obter o controle de usuário e definir o texto da etiqueta, sem lhes dar acesso ao próprio rótulo. (Note que se eles realmente queriam, eles poderiam acessá-lo através da propriedade Controls)

Você poderia fazer um par de métodos como GetLabelText e SetLabelText, que outras pessoas poderiam chamar para alterar o rótulo. No entanto, os métodos de ligar assim é estranho. Por exemplo, se alguém quisesse acrescentar a letra A com o rótulo, eles teriam que fazer algo como isto: control.SetLabelText(control.GetLabelText() + "A"). Se você fizer uma propriedade LabelText, wh = om Get e Set acessores vez de GetLabelText e SetLabelText, que podiam control.LabelText += "A" Basta escrever.

Quando você escreve uma propriedade, você escreve as Get e Set acessores como funções regulares. Get não tem parâmetros e retorna o valor da propriedade, e Set toma um novo valor para a propriedade como um parâmetro chamado Value escondido e não retorna nada.

Por exemplo:

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

Você tem um propriedade que pode ter alguma combinação de um getter e um setter. O getter é o código que é executado quando você ler de a propriedade. Este código deve retornar um valor. O setter é o código que é executado quando você Atribuir a a propriedade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top