os assessores da propriedade em Visual Basic .Net
Pergunta
Alguém poderia me explicar o conceito de obter e definir propriedade? Ele só não está afundando no para mim.
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.