Qual é a sintaxe {get; set;} em C#?
public class Genre
{
public string Name { get; set; }
}
o que significa isto: { get; set; }
?
15 answers
É uma propriedade auto, e é essencialmente uma abreviatura para o seguinte (código similar será gerado pelo compilador):
private string name;
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
public class Genre
{
private string name; // This is the backing field
public string Name // This is your property
{
get => name;
set => name = value;
}
}
No Entanto, se você gosta de mim - cerca de uma hora atrás - você não entende realmente o que propriedades e os acessores de é, e você não tem o melhor compreensão de algumas terminologias básicas de qualquer um. MSDN é uma ótima ferramenta para aprender coisas como esta, mas nem sempre é fácil de entender para principiantes. Vou tentar explicar isto mais em profundidade.
get
e set
são os acessores de, o que significa que eles são capazes de acessar dados e informações em private campos (geralmente a partir de um campo de apoio) e geralmente o fazem a partir de public propriedades (como você pode ver no exemplo acima).
Genre g1 = new Genre(); //Here we're creating a new instance of the class "Genre"
//called g1. We'll create as many as we need (3)
Genre g2 = new Genre();
Genre g3 = new Genre();
//Note the () following new Genre. I believe that's essential since we're creating a
//new instance of a class (Like I said, I'm a beginner so I can't tell you exactly why
//it's there but I do know it's essential)
Agora que criamos as instâncias da classe de gênero podemos definir os nomes dos gêneros usando o 'nome'' propriedade foi tudo planeado. acima.
public string Name //Again, this is the 'Name' property
{ get; set; } //And this is the shorthand version the process we're doing right now
Podemos definir o nome de 'g1' para Hip Hop escrevendo o seguinte
g1.Name = "Hip Hop";
O que está a acontecer aqui é um pouco complexo. Como eu disse antes, get
e set
acesso a informação de campos privados que você de outra forma não seria capaz de acessar. get
só podeler informação desse campo privado e devolvê-la. set
só podeescrever informação nesse campo privado. Mas tendo uma propriedade com ambas as coisas, podemos fazer as duas coisas. dessas funções. E ao escrever g1.Name = "Hip Hop";
estamos a usar especificamente a função set
da nossa propriedade de nome
set
usa uma variável implícita chamada value
. Basicamente, o que isso significa é que quando você vê "valor" dentro de set
, ele está se referindo a uma variável; a variável "valor". Quando escrevemos g1.Name =
estamos a usar o =
para passar na variável value
que neste caso é "Hip Hop"
. Então você pode essencialmente pensar nisso assim:
public class g1 //We've created an instance of the Genre Class called "g1"
{
private string name;
public string Name
{
get => name;
set => name = "Hip Hop"; //instead of 'value', "Hip Hop" is written because
//'value' in 'g1' was set to "Hip Hop" by previously
//writing 'g1.Name = "Hip Hop"'
}
}
É importante notar que o o exemplo acima não está escrito no código. É mais um código hipotético que representa o que se passa no fundo.
Agora que temoso nome da instância g1 do género, creio que podemos obter o nome escrevendo
console.WriteLine (g1.Name); //This uses the 'get' function from our 'Name' Property
//and returns the field 'name' which we just set to
//"Hip Hop"
E se fizéssemos isto, ficaríamos na nossa consola.
Então, para efeitos desta explicação, Vou completar o exemplo com saídas como bem
using System;
public class Genre
{
public string Name { get; set; }
}
public class MainClass
{
public static void Main()
{
Genre g1 = new Genre();
Genre g2 = new Genre();
Genre g3 = new Genre();
g1.Name = "Hip Hop";
g2.Name = "Rock";
g3.Name = "Country";
Console.WriteLine ("Genres: {0}, {1}, {2}", g1.Name, g2.Name, g3.Name);
}
}
Resultado:
"Genres: Hip Hop, Rock, Country"
São propriedades automáticas
Basicamente, outra forma de escrever uma propriedade com um campo de apoio.public class Genre
{
private string _name;
public string Name
{
get => _name;
set => _name = value;
}
}
Esta é a forma curta de fazer isto:
public class Genre
{
private string _name;
public string Name
{
get => _name;
set => _name = value;
}
}
É um atalho para expor os membros dos dados como públicos para que não seja necessário criar explicitamente um membro de dados privado. C# will cria um membro de dados privado para você.
Você poderia apenas tornar seus membros de dados públicos sem usar este atalho, mas então se você decidiu mudar a implementação do membro de dados para ter alguma lógica, então você teria que quebrar a interface. Resumindo, é um atalho para criar um código mais flexível.
Basicamente é um atalho de:
class Genre{
private string genre;
public void getGenre() {
return this.genre;
}
public void setGenre(string theGenre) {
this.genre = theGenre;
}
}
//In Main method
genre g1 = new Genre();
g1.setGenre("Female");
g1.getGenre(); //Female
É uma propriedade auto-implementada para C#.
Você os usaria para obter / definir o valor dessa propriedade em uma instância do gênero.
Pode ler mais sobre o Guia de programação de propriedades auto-implementado do MSDN .
Isto significa que se criar uma variável de tipo de género, será capaz de aceder à variável como uma propriedade
Genre oG = new Genre();
oG.Name = "Test";
O padrão get / set fornece uma estrutura que permite que a lógica seja adicionada durante a configuração ('set') ou recuperação ('get') de uma instância de propriedade de uma classe instanciada, que pode ser útil quando alguma lógica de instanciação é necessária para a propriedade.
Uma propriedade só pode ter um acessor 'get', que é feito para que a propriedade só seja lida
Ao implementar um padrão get / set, uma variável intermediária é usada como um container em que um valor pode ser colocado e um valor extraído. A variável intermediária é normalmente prefixada com um sublinhado. esta variável intermediária é privada, a fim de garantir que ela só pode ser acessada através de suas chamadas get/set. Veja a resposta de Brandon, como sua resposta demonstra as Convenções de sintaxe mais comumente usadas para implementar get/set.
Tal sintaxe { get; set; }
chama-se propriedades automáticas, sintaxe C# 3.0
Deve usar o Visual C# 2008 / csc V3.5 ou superior para compilar. Mas você pode compilar a saída que tem como alvo tão baixo quanto o.NET Framework 2.0 (sem tempo de execução ou classes necessárias para suportar este recurso).
No Visual Studio, se definir uma propriedade {[[0]} numa classe e quiser usar esta classe apenas como um tipo, depois de construir o seu projecto, receberá um aviso que diz "O campo X nunca é atribuído, e terá sempre o seu valor por omissão".
Adicionando uma propriedade { get; set; }
a X
, não receberá este Aviso.
Além do Visual Studio 2013 e versões superiores, adicionando { get; set; }
Você é capaz de ver todas as referências a isso propriedade.
Get set são modificadores de acesso à propriedade. Lê o campo de propriedades. Define o valor da propriedade. Obter é como acesso apenas para leitura. O Set é como um acesso apenas para escrita. Para usar a propriedade como ler escrever tanto get e set deve ser usado.
Para uma propriedade auto-implementada, o campo de apoio funciona por trás da cena e não é visível.
Exemplo:
public string Log { get; set; }
Considerando que para uma propriedade não auto-implementada o campo de suporte é Frontal, visível como uma variável privada escopada.
Exemplo:
private string log;
public string Log
{
get => log;
set => log = value;
}
Além disso, vale a pena notar aqui é o o 'getter' e o' setter 'podem utilizar os diferentes' campos de Suporte '