Como podemos gerar getters e setters no Visual Studio?


226

Por "gerar", refiro-me à geração automática do código necessário para uma determinada (s) variável (s) selecionada (s).

Mas qualquer explicação ou comentário mais explícito sobre boas práticas é bem-vindo.

Respostas:



51

O Visual Studio também possui um recurso que irá gerar uma propriedade a partir de uma variável privada.

Se você clicar com o botão direito em uma variável, no menu de contexto que aparece, clique no item "Refactor", e depois escolher Encapsulate campo ... . Isso criará uma propriedade getter / setter para uma variável.

Eu não sou muito fã dessa técnica, pois é um pouco complicado de usar, se você precisar criar muitos getters / setters, e coloca a propriedade diretamente abaixo do campo privado, o que me incomoda, porque geralmente todos os meus campos particulares estão agrupados e esse recurso do Visual Studio interrompe a formatação da minha classe.


10
Infelizmente, essa opção não é fornecida pelas edições expressas do Visual Studio.
Toby

12
há shourtcut também - I preffer desta forma :) - CTRL + R + E
Vukasin

32

Eu uso o Visual Studio 2013 Professional.

  • Coloque o cursor na linha de uma variável de instância.

    Digite a descrição da imagem aqui

  • Pressione as teclas combinadas Ctrl+ R, Ctrl+ Eou clique no botão direito do mouse. Escolha o menu de contexto RefatorarEncapsular campo ... e pressione OK.

    Digite a descrição da imagem aqui

  • Na caixa de diálogo Visualizar alterações de referência - Encapsular campo , pressione o botão Apply.

    Digite a descrição da imagem aqui

  • Este é o resultado:

    Digite a descrição da imagem aqui



Você também coloca o cursor para escolher uma propriedade . Use o menu EditarRefatorarEncapsular campo ...

  • Outra informação:

    Desde o C # 3.0 (19 de novembro de 2007), podemos usar propriedades implementadas automaticamente (isso é apenas açúcar sintático ).

    E

    private int productID;
    
    public int ProductID
    {
        get { return productID; }
        set { productID = value; }
    }

    torna-se

    public int ProductID { get; set; }

30

Por gerar, você quer dizer gerar automaticamente? Se não é isso que você quer dizer:

O Visual Studio 2008 tem a implementação mais fácil para isso:

public PropertyType PropertyName { get; set; }

Em segundo plano, isso cria uma variável de instância implícita na qual sua propriedade é armazenada e recuperada.

No entanto, se você quiser colocar mais lógica em suas Propriedades, precisará ter uma variável de instância para isso:

private PropertyType _property;

public PropertyType PropertyName
{
    get
    {
        //logic here 
        return _property;
    }
    set
    {
        //logic here
        _property = value;
    }
 }

As versões anteriores do Visual Studio sempre usavam esse método também.


O padrão em C # não é o traço inferior após o nome do membro em property_vez de antes _property?
Julen 30/03

2
@ Julen - eu sempre vi a convenção _property.
Nathan DeWitt

27

Você também pode usar "propfull" e pressionar TABduas vezes.

A variável e a propriedade com get e set serão geradas.


esta é a mais útil e eu sempre a esqueço #
Dave Alperovich

Estou fazendo serialização XML e gerando uma tonelada de propriedades em todo o programa. Mais de 100 milhões de votos, se eu pudesse. Obrigado! Editar- AINDA MELHOR, script de autohotkey + ^ isto = produtividade acima de 90000!
Eon

Vídeo demonstrando o uso do snippet 'propfull' (entre outras coisas), aos 4 min 11 segundos.
Peter Mortensen

6

Se você estiver usando o Visual Studio 2005 e superior, poderá criar um setter / getter rapidamente, usando o comando insert snippet.

Clique com o botão direito do mouse no seu código, clique em Inserir Snippet ( Ctrl+ K, X) e escolha "prop" na lista.


4

Se você estiver usando o ReSharper, entre no menu ReSharper → CódigoGerar ...

(Ou pressione Alt+ Insdentro da classe circundante) e você terá todas as opções para gerar getters e / ou setters que você pode pensar :-)


3

Use a propfullpalavra - chave

Irá gerar uma propriedade e uma variável.

Digite a palavra-chave propfullno editor, seguida por dois TABs. Irá gerar código como:

private data_type var_name;

public data_type var_name1{ get;set;}

Vídeo demonstrando o uso do snippet 'propfull' (entre outras coisas), aos 4 min 11 segundos.


2
forneça mais informações sobre sua resposta, respostas com uma breve descrição não
serão

digite palavra-chave propfull no editor, ele irá gerar código como private data_type var_name; public data_type var_name1 {get; set;}
avinash kadu

Você pode adicionar uma referência para "propfull" ( editando sua resposta , não aqui nos comentários)?
Peter Mortensen

3

Criei meu próprio snippet que apenas adiciona {get; set;}. Eu fiz isso apenas porque acho que propTabé desajeitado.

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>get set</Title>
            <Shortcut>get</Shortcut>
        </Header>
        <Snippet>
            <Code Language="CSharp">
                <![CDATA[{get; set;}]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Com isso, você digita seu PropType e PropName manualmente, depois digita getTabe ele adiciona o conjunto de configurações. Não é nada mágico, mas desde que eu costumo digitar meu modificador de acesso de qualquer maneira, também posso terminar o nome e o tipo.


2

No Visual Studio Community Edition 2015, você pode selecionar todos os campos que deseja e pressionar Ctrl+ .para gerar automaticamente as propriedades.

Você precisa escolher se deseja usar a propriedade em vez do campo ou não.


1

Além do snippet 'prop' e das propriedades automáticas, existe uma opção de refatoração que permite selecionar um campo existente e expô-lo através de uma propriedade ( clique com o botão direito do mouse no campo → RefatorarEncapsular campo ... ).

Além disso, se você não gostar da implementação 'prop', poderá criar seus próprios snippets. Além disso, uma ferramenta de refatoração de terceiros como o ReSharper oferecerá ainda mais recursos e facilitará a criação de trechos mais avançados. Eu recomendo o ReSharper se você puder pagar.


O primeiro link é redirecionado para a documentação do Visual Studio 2005 Retired . A qual dos dez se referiu? Presumivelmente, é uma descrição de como usar trechos no Visual Studio.
Peter Mortensen

1

No visual studio 2019, selecione suas propriedades assim:

insira a descrição da imagem aqui

Então pressione Ctrl+r Então pressioneCtrl+e

Uma caixa de diálogo aparecerá mostrando a visualização das alterações que serão feitas no seu código. Se tudo parecer bom (o que geralmente ficará), pressione OK.


0

Não tenho mais o Visual Studio instalado na minha máquina (e estou usando o Linux), mas lembro que havia um assistente escondido em algum lugar dentro de um dos menus que dava acesso a um construtor de classes.

Com este assistente, você pode definir todos os detalhes de suas classes, incluindo métodos e atributos. Se bem me lembro, havia uma opção através da qual você poderia pedir ao Visual Studio para criar os setters e getters automaticamente para você.

Eu sei que é bastante vago, mas confira e você pode encontrá-lo.



0

Primeiro obtenha o Extension, pressione ( Ctrl+ Shift+ X) e instale o getter setter ....

Depois disso, basta selecionar sua variável e clicar com o botão direito. Vá para a paleta de comandos ...

E digite getter ... Sugerirá gerar métodos get e set. Clique aqui ...


1
O que você quer dizer com "Primeiro a obter extensão" ?
Peter Mortensen

Em que contexto Ctrl + Shift + X deve ser pressionado?
Peter Mortensen

-4

Você simplesmente pressiona Alt+ Insno Android Studio.

Depois de declarar variáveis, você obterá os getters e setters no código gerado.


Ninguém perguntou sobre o android studio
warzone_fz

A pergunta é "Como podemos gerar getters e setters no Visual Studio?" . Visual Studio não é o mesmo que Android Studio .
Peter Mortensen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.