Come possiamo generare getter e setter in Visual Studio?


226

Per "generare", intendo auto-generazione del codice necessario per una particolare selezionata (serie di) variabili.

Ma qualsiasi spiegazione o commento più esplicito sulle buone pratiche è il benvenuto.

Risposte:



51

Visual Studio ha anche una funzione che genererà una proprietà da una variabile privata.

Se si fa clic su una variabile, nel menu contestuale che si apre, fare clic sulla voce "refactoring", e scegliere Incapsula campo ... . Ciò creerà una proprietà getter / setter per una variabile.

Non sono un grande fan di questa tecnica in quanto è un po 'scomodo da usare se devi creare molti getter / setter e mette la proprietà direttamente sotto il campo privato, il che mi dà fastidio, perché di solito ho raggruppato tutti i miei campi privati ​​e questa funzionalità di Visual Studio interrompe la formattazione della mia classe.


10
Sfortunatamente, questa opzione non è data dalle edizioni express di Visual Studio.
Toby,

12
c'è anche shourtcut - preferisco così :) - CTRL + R + E
Vukasin

32

Uso Visual Studio 2013 Professional.

  • Posiziona il cursore sulla linea di una variabile di istanza.

    Inserisci qui la descrizione dell'immagine

  • Premere i tasti Combina Ctrl+ R, Ctrl+ Eo fare clic con il tasto destro del mouse. Selezionare il menu di scelta rapida RefactorEncapsulate Field ... , quindi premere OK.

    Inserisci qui la descrizione dell'immagine

  • Nella finestra di dialogo Anteprima modifiche modifiche - Campo incapsula , premere il pulsante Apply.

    Inserisci qui la descrizione dell'immagine

  • Questo è il risultato:

    Inserisci qui la descrizione dell'immagine



Posiziona anche il cursore per scegliere una proprietà . Usa il menu ModificaRefactorEncapsulate Field ...

  • Altre informazioni:

    Dal C # 3.0 (19 novembre 2007), possiamo usare le proprietà auto-implementate (questo è semplicemente zucchero sintattico ).

    E

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

    diventa

    public int ProductID { get; set; }

30

Per generare, intendi auto-generare? Se non è quello che vuoi dire:

Visual Studio 2008 ha l'implementazione più semplice per questo:

public PropertyType PropertyName { get; set; }

Sullo sfondo viene creata una variabile di istanza implicita in cui la proprietà viene archiviata e recuperata.

Tuttavia, se vuoi inserire più logica nelle tue Proprietà, dovrai avere una variabile di istanza per essa:

private PropertyType _property;

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

Le versioni precedenti di Visual Studio utilizzavano sempre anche questo metodo longhand.


Lo standard in C # non è il trattino inferiore dopo il nome del membro property_anziché prima _property?
Julen,

2
@Julen - Ho sempre visto la convenzione _property.
Nathan DeWitt,

27

Puoi anche usare "propfull" e premere TABdue volte.

Verranno generate la variabile e la proprietà con get e set.


questo è il più utile e lo dimentico sempre
Dave Alperovich,

Sto eseguendo la serializzazione XML e generando un sacco di proprietà in tutto lo show. + 100 milioni di voti se potessi. Grazie! Modifica- ANCORA MEGLIO, script autohotkey + ^ this = produttività oltre 90000!
Eon,

Video che dimostra l'uso dello snippet "propfull" (tra le altre cose), a 4 minuti e 11 secondi.
Peter Mortensen,

6

Se si utilizza Visual Studio 2005 e versioni successive, è possibile creare un setter / getter molto velocemente utilizzando il comando insert snippet.

Fai clic con il pulsante destro del mouse sul codice, fai clic su Inserisci frammento ( Ctrl+ K, X), quindi scegli "prop" dall'elenco.


4

Se stai usando ReSharper, vai nel menu ReSharper → CodiceGenera ...

(Oppure premi Alt+ Insall'interno della classe circostante) e otterrai tutte le opzioni per generare getter e / o setter a cui puoi pensare :-)


3

Usa la propfullparola chiave.

Genererà una proprietà e una variabile.

Digita la parola chiave propfullnell'editor, seguita da due TABsecondi. Genererà codice come:

private data_type var_name;

public data_type var_name1{ get;set;}

Video che dimostra l'uso dello snippet "propfull" (tra le altre cose), a 4 minuti e 11 secondi.


2
per favore fornisci maggiori informazioni sulla tua risposta, le risposte con una breve descrizione non
vanno

digitare la parola chiave propfull nell'editor genererà codice come private data_type var_name; public data_type var_name1 {get; set;}
avinash kadu

Puoi aggiungere un riferimento a "propfull" ( modificando la tua risposta , non qui nei commenti)?
Peter Mortensen,

3

Ho creato il mio frammento che aggiunge solo{get; set;} . L'ho fatto solo perché trovo propTabessere goffa.

<?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>

Con questo, digitate PropType e PropName manualmente, quindi digitate getTabe aggiungerà il set get. Non è niente di magico, ma dal momento che tendo a digitare prima il mio modificatore di accesso, posso anche finire il nome e il tipo.


2

In Visual Studio Community Edition 2015 è possibile selezionare tutti i campi desiderati e quindi premere Ctrl + .per generare automaticamente le proprietà.

Devi scegliere se vuoi usare la proprietà invece del campo o meno.


1

Oltre allo snippet 'prop' e alle proprietà automatiche, esiste un'opzione refactor che consente di selezionare un campo esistente ed esporlo tramite una proprietà ( fare clic con il tasto destro del mouse sul campo → RefactorEncapsulate Field ... ).

Inoltre, se non ti piace l'implementazione 'prop', puoi creare i tuoi frammenti. Inoltre, uno strumento di refactoring di terze parti come ReSharper ti offre ancora più funzionalità e semplifica la creazione di snippet più avanzati. Consiglierei ReSharper se te lo puoi permettere.


Il primo collegamento reindirizza alla documentazione ritirata di Visual Studio 2005 . A quale dei dieci si riferiva? Presumibilmente, è una descrizione di come utilizzare gli snippet in Visual Studio.
Peter Mortensen,

1

In Visual Studio 2019, seleziona le tue proprietà in questo modo:

inserisci qui la descrizione dell'immagine

Quindi premere Ctrl+r Quindi premereCtrl+e

Viene visualizzata una finestra di dialogo che mostra l'anteprima delle modifiche che verranno apportate al codice. Se tutto sembra a posto (cosa che per lo più sarà), premere OK.


0

Non ho più Visual Studio installato sul mio computer (e sto usando Linux), ma ricordo che c'era una procedura guidata nascosta da qualche parte all'interno di uno dei menu che consentiva l'accesso a un generatore di classi.

Con questa procedura guidata, è possibile definire tutti i dettagli delle classi, inclusi metodi e attributi. Se ricordo bene, c'era un'opzione attraverso la quale si poteva chiedere a Visual Studio di creare automaticamente setter e getter.

So che è abbastanza vago, ma dai un'occhiata e potresti trovarlo.



0

Per prima cosa prendi l'estensione, premi ( Ctrl+ Shift+ X) e installa getter setter ....

Successivamente, basta selezionare la variabile e fare clic con il tasto destro. Vai alla palette dei comandi ...

E digita getter ... Suggerirà di generare metodi get e set. Clicca su questo ...


1
Cosa intendi con "First get Extension" ?
Peter Mortensen,

In quale contesto è necessario premere Ctrl + Maiusc + X?
Peter Mortensen,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.