Estou aprendendo o ASP.NET MVC e posso ler documentos em inglês, mas realmente não entendo o que está acontecendo neste código:
public class Genre
{
public string Name { get; set; }
}
O que isso significa { get; set; }
:?
c#
properties
kn3l
fonte
fonte
{get; set;}
está criando um Campo, mas se você colocar,{get; set;}
está criando uma Propriedade . Ter uma propriedade pode facilitar algumas coisas, especialmente quando se trabalha com o Reflection.Respostas:
É uma propriedade chamada auto e é essencialmente uma abreviação para o seguinte (código semelhante será gerado pelo compilador):
fonte
=
operador, mas apenas para um elemento em particular, certo?name
é criada. Se você tentou fazer referência a essa variável privada dentro da classe, ela falhará. Não tenho certeza de como o C # faz isso, mas se comporta como se houvesse uma variável privada sem nome, que você não pode acessar no seu código.Pelo que entendi,
{ get; set; }
é uma "propriedade automática" que, como @Klaus e @Brandon disseram, é uma abreviação para escrever uma propriedade com um "campo de apoio". Então, neste caso:No entanto, se você é como eu - cerca de uma hora atrás - você realmente não entende o que são propriedades e acessadores e também não tem o melhor entendimento de algumas terminologias básicas. O MSDN é uma ótima ferramenta para aprender coisas como essa, mas nem sempre é fácil de entender para iniciantes. Então, vou tentar explicar isso mais profundamente aqui.
get
eset
são acessadores , o que significa que eles podem acessar dados e informações em campos particulares (geralmente de um campo de apoio ) e geralmente de propriedades públicas (como você pode ver no exemplo acima).Não há como negar que a declaração acima é bastante confusa, então vamos dar alguns exemplos. Digamos que esse código esteja se referindo a gêneros musicais. Então, dentro da classe Gênero, vamos querer diferentes gêneros musicais. Digamos que queremos ter três gêneros: Hip Hop, Rock e Country. Para fazer isso, usaríamos o nome da classe para criar novas instâncias dessa classe.
Agora que criamos as instâncias da classe Genre, podemos definir os nomes dos gêneros usando a propriedade 'Name' que foi configurada acima.
Podemos definir o nome de 'g1' para Hip Hop, escrevendo o seguinte
O que está acontecendo aqui é meio complexo. Como eu disse antes,
get
eset
acesse informações de campos particulares que você não conseguiria acessar.get
só pode ler informações desse campo privado e devolvê-las.set
só pode gravar informações nesse campo privado. Mas, tendo uma propriedade com ambosget
eset
somos capazes de executar essas duas funções. E, escrevendog1.Name = "Hip Hop";
, estamos especificamente usando aset
função da nossa propriedade Nameset
usa uma variável implícita chamadavalue
. Basicamente, o que isso significa é que sempre que você vê "valor"set
, está se referindo a uma variável; a variável "value". Quando escrevemosg1.Name =
, estamos usando o=
para passar avalue
variável que, neste caso, é"Hip Hop"
. Então você pode essencialmente pensar assim:É importante observar que o exemplo acima não está realmente escrito no código. É mais um código hipotético que representa o que está acontecendo em segundo plano.
Então agora que definimos o nome da instância g1 do gênero , acredito que podemos obter o nome escrevendo
e se rodássemos isso, entraríamos
"Hip Hop"
em nosso console.Portanto, para o propósito desta explicação, completarei o exemplo com saídas também
Resultado:
fonte
set{name = value;} // 'value' here is equal to "Hip Hop"
get
eset
. O link que forneci tem uma excelente citação de John Guttag na parte superior da página. Eu recomendaria ler seu livro ou mesmo tomar este curso online gratuitopublic class Genre{public string Name;}
em vez de:public class Genre{ public string Name { get; set; }}
. Quero dizer, por que precisamos de {get; conjunto; }?Essas são propriedades automáticas
Basicamente, outra maneira de escrever uma propriedade com um campo de apoio.
fonte
get
e persistiu usandoset
). Como o armário para o qualget
eset
abre a porta._name
. Na propriedade automática, o campo de suporte está oculto.Esta é a maneira curta de fazer isso:
fonte
É um atalho para expor membros de dados como públicos, para que você não precise criar explicitamente membros de dados privados. O C # cria um membro de dados privado para você.
Você pode apenas tornar seus membros de dados públicos sem usar esse atalho, mas se você decidir alterar a implementação do membro de dados para ter alguma lógica, precisará interromper a interface. Portanto, em resumo, é um atalho para criar código mais flexível.
fonte
Basicamente, é um atalho de:
fonte
É uma propriedade implementada automaticamente para C #.
fonte
get; set;
é chamado?null
como qualquerstring
variável atésomeInstanceOfGenere.Name = "someValue"
Eles são os acessadores do nome da propriedade pública.
Você os usaria para obter / definir o valor dessa propriedade em uma instância de Genre.
fonte
Essa é uma propriedade implementada automaticamente. É basicamente uma maneira abreviada de criar propriedades para uma classe em C #, sem precisar definir variáveis particulares para elas. Eles são normalmente usados quando nenhuma lógica extra é necessária ao obter ou definir o valor de uma variável.
Você pode ler mais no Guia de Programação de Propriedades Auto-Implementadas do MSDN .
fonte
O padrão get / set fornece uma estrutura que permite que a lógica seja adicionada durante a configuração ('set') ou a recuperação ('get') de uma instância de propriedade de uma classe instanciada, o que pode ser útil quando alguma lógica de instanciação for necessária para o método propriedade.
Uma propriedade pode ter apenas um acessador 'get', o que é feito para tornar essa propriedade somente leitura
Ao implementar um padrão get / set, uma variável intermediária é usada como um contêiner no qual um valor pode ser colocado e um valor extraído. A variável intermediária geralmente é prefixada com um sublinhado. essa variável intermediária é privada para garantir que só possa ser acessada através de suas chamadas get / set. Veja a resposta de Brandon, pois sua resposta demonstra as convenções de sintaxe mais usadas para implementar o get / set.
fonte
Isso significa que, se você criar uma variável do tipo Genre, poderá acessar a variável como uma propriedade
fonte
Essa
{ get; set; }
sintaxe é chamada de propriedades automáticas, sintaxe C # 3.0Você deve usar o Visual C # 2008 / csc v3.5 ou superior para compilar. Mas você pode compilar uma saída que tenha como alvo o .NET Framework 2.0 (sem tempo de execução ou classes necessárias para oferecer suporte a esse recurso).
fonte
No Visual Studio, se você definir uma propriedade
X
em uma classe e quiser usá-la apenas como um tipo, depois de criar seu projeto, receberá um aviso dizendo "O campo X nunca é atribuído e sempre terá seu padrão". valor " .Ao adicionar um
{ get; set; }
aX
propriedade, você não vai conseguir este aviso.Além disso, no Visual Studio 2013 e nas versões superiores, adicionando
{ get; set; }
você poderá ver todas as referências a essa propriedade.fonte
É basicamente uma taquigrafia. Você pode escrever
public string Name { get; set; }
como em muitos exemplos, mas também pode escrever:Por que é usado? Ele pode ser usado para filtrar o acesso a uma propriedade, por exemplo, você não deseja que os nomes incluam números.
Deixe-me lhe dar um exemplo:
Oficialmente, é chamado Propriedades Auto-Implementadas e seu bom hábito de ler o ( guia de programação ). Eu também recomendaria o vídeo tutorial C # Properties: Por que usar "get" e "set" .
fonte
Conjunto são modificadores de acesso à propriedade. Get lê o campo da propriedade. Set define o valor da propriedade. Get é como acesso somente leitura. Conjunto é como acesso somente gravação. Para usar a propriedade como leitura, gravação, get e set devem ser usados.
fonte
Get é chamado quando a propriedade aparece no lado direito (RHS) O conjunto é chamado quando a propriedade aparece no lado esquerdo (LHS) do símbolo '='
Para uma propriedade implementada automaticamente, o campo de suporte funciona nos bastidores e não é visível.
Exemplo:
Enquanto que para uma propriedade não implementada automaticamente, o campo de suporte é inicial, visível como uma variável de escopo particular.
Exemplo:
Além disso, vale ressaltar aqui que o 'getter' e o 'setter' podem usar os diferentes 'campos de apoio'
fonte
Definir as variáveis privadas
Dentro do Construtor e carregue os dados
Criei Constant e carregue os dados da constante na classe Selected List.
fonte
Uma propriedade é como uma camada que separa a variável privada de outros membros de uma classe. Do mundo exterior, parece que uma propriedade é apenas um campo, uma propriedade pode ser acessada usando.
FullName é uma propriedade. O da seta é um atalho. Do mundo exterior, podemos acessar o FullName assim:
Os chamadores não se importam com a maneira como você implementou o FullName. Mas, dentro da classe, você pode alterar o Nome completo conforme desejar.
Confira a documentação da Microsoft para obter explicações mais detalhadas:
https://docs.microsoft.com/en-us/dotnet/csharp/properties
fonte