Jak możemy generować gettery i settery w Visual Studio?

Przez "generate" mam na myśli automatyczne generowanie kodu niezbędnego dla danej wybranej(zestawu) zmiennej (zmiennych).

Ale wszelkie bardziej jednoznaczne wyjaśnienia lub komentarze na temat dobrych praktyk są mile widziane.

Author: Peter Mortensen, 2008-08-06

16 answers

Zamiast używać Ctrl + K, X Możesz również po prostu wpisać prop, a następnie dwukrotnie nacisnąć Tab.

 307
Author: Orion Edwards,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 18:02:25

Visual Studio ma również funkcję, która wygeneruje właściwość ze zmiennej prywatnej.

Jeśli klikniesz prawym przyciskiem myszy na zmiennej, w menu kontekstowym, które się pojawi, Kliknij pozycję "Refactor" , a następnie wybierz Enkapsulate Field.... Spowoduje to utworzenie właściwości getter / setter dla zmiennej.

Nie jestem zbyt wielkim fanem tej techniki, ponieważ jest to trochę niewygodne w użyciu, jeśli musisz stworzyć wiele getterów/setterów, a to stawia właściwość bezpośrednio poniżej prywatne pole, które mnie wkurza, ponieważ zazwyczaj wszystkie moje prywatne pola są zgrupowane razem, a ta funkcja Visual Studio łamie formatowanie mojej klasy.

 52
Author: Dan Herbert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:21:57

Używam Visual Studio 2013 Professional.

  • Umieść kursor w linii zmiennej instancji.

    Tutaj wpisz opis obrazka

  • Naciśnij klawisze połącz Ctrl + R, Ctrl + E , lub kliknij prawym przyciskiem myszy. Wybierz Menu kontekstowe RefactorEnkapsulować pole..., a następnie naciśnij OK .

    Tutaj wpisz opis obrazka

  • W Podgląd zmian referencji-okno dialogowe Enkapsulate, naciśnij przycisk Zastosuj .

    Tutaj wpisz opis obrazka

  • to jest wynik:

    Tutaj wpisz opis obrazka



można również umieścić kursor do wyboru właściwości . Użyj menu edycjaRefaktorEnkapsulować pole...

  • Inne informacje:

    Od C # 3.0 (19 listopada 2007), możemy używać auto-zaimplementowanych właściwości (jest to tylko składnia cukier ).

    I

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

    Staje się

    public int ProductID { get; set; }
    
 35
Author: NVy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:29:25

Przez generowanie, masz na myśli automatyczne generowanie? Jeśli nie o to ci chodzi:

Visual Studio 2008 ma do tego najłatwiejszą implementację:

public PropertyType PropertyName { get; set; }

W tle tworzy to domyślną zmienną instancji, do której jest przechowywana i pobierana twoja właściwość.

Jednak jeśli chcesz umieścić więcej logiki we właściwościach, musisz mieć zmienną instancji dla niej:

private PropertyType _property;

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

Poprzednie wersje Visual Studio zawsze stosowały tę metodę.

 30
Author: Jon Limjap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 02:31:37

Możesz również użyć "propfull" i nacisnąć TAB dwa razy.

Zostanie wygenerowana zmienna i właściwość z get I set.

 28
Author: Chirag Khatsuriya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 19:59:26

Jeśli używasz Visual Studio 2005 i nowszych, możesz szybko utworzyć setter/getter za pomocą polecenia insert snippet.

Kliknij prawym przyciskiem myszy kod, Kliknij Wstaw fragment (Ctrl+K,X ), a następnie wybierz "prop" z listy.

 6
Author: omar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 18:07:56

Jeśli używasz ReSharper, przejdź do menu ReSharper → kod / align = "left" / ..

(lub hit Alt + Ins wewnątrz otaczającej klasy), a otrzymasz wszystkie opcje generowania getterów i / lub setterów, które możesz wymyślić: -)

 4
Author: Oliver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 19:49:59

W programie visual studio 2019 wybierz swoje właściwości w następujący sposób:

Tutaj wpisz opis obrazka

Następnie naciśnij Ctrl+r Następnie naciśnij Ctrl+e

Pojawi się okno dialogowe z podglądem zmian, które zostaną wprowadzone do kodu. Jeśli wszystko wygląda dobrze (co najczęściej będzie), naciśnij OK.

 4
Author: Adil Malik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-25 23:38:43

Użyj słowa kluczowego propfull.

Wygeneruje właściwość i zmienną.

Wpisz słowo kluczowe propfull w edytorze, a następnie dwie zakładki s. wygeneruje kod w postaci:

private data_type var_name;

public data_type var_name1{ get;set;}

Film demonstrujący użycie fragmentu "propfull" (między innymi), w 4 min 11 sek.

 3
Author: avinash kadu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:05:34

Stworzyłem własny fragment, który tylko dodaje {get; set;}. Zrobiłem to tylko dlatego, że znalazłem propTab to be clunky.

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

Tym, wpisujesz swój PropType i PropName ręcznie, a następnie wpisujesz getTab , i doda get set. To nic magicznego, ale ponieważ i tak mam tendencję do wpisywania modyfikatora dostępu, równie dobrze mogę dokończyć nazwę i wpisać.

 3
Author: bsayegh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:15:34

W Visual Studio Community Edition 2015 możesz wybrać wszystkie pola, które chcesz, a następnie nacisnąć Ctrl + . aby automatycznie wygenerować właściwości.

Musisz wybrać, czy chcesz użyć właściwości zamiast pola, czy nie.

 2
Author: Tito Leiva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:33:27

Oprócz fragmentu 'prop' i auto-właściwości, istnieje opcja refactor pozwalająca wybrać istniejące pole i wyeksponować je za pomocą właściwości (Kliknij prawym przyciskiem myszy na polu → RefactorEnkapsulować pole...).

Ponadto, jeśli nie podoba Ci się implementacja 'prop', możesz tworzyć własne urywki. Dodatkowo narzędzie do refaktoryzacji innych firm, takie jak ReSharper , zapewni Ci jeszcze więcej funkcji i ułatwi tworzenie bardziej zaawansowanych fragmentów. Polecam ReSharper, jeśli cię na to stać.

 1
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:19:51

Nie mam już zainstalowanego Visual Studio na moim komputerze (i używam Linuksa), ale pamiętam, że gdzieś w jednym z menu ukryty był kreator, który dawał dostęp do konstruktora klas.

Za pomocą tego kreatora możesz zdefiniować wszystkie szczegóły klas, w tym metody i atrybuty. O ile dobrze pamiętam, istniała opcja, dzięki której można było poprosić Visual Studio o automatyczne tworzenie setterów i getterów.

Wiem, że to dość niejasne, ale sprawdź to, a może znajdziesz.

 0
Author: Mario Marinato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 18:05:15

Tutaj wpisz opis obrazka

W imieniu narzędzia Visual Studio możemy łatwo wygenerować C# properties za pomocą narzędzia online o nazwie C # properties generator.

 0
Author: DotNetLover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:35:14

Najpierw pobierz rozszerzenie po prostu naciśnij (Ctrl + Shift + X ) i zainstalować getter setter ....

Następnie Wybierz zmienną i kliknij prawym przyciskiem myszy. Przejdź do palety poleceń...

I wpisz getter ... Zasugeruje generowanie metod get I set. Kliknij na to...

 0
Author: Sejpalsinh Jadeja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:49:25

Wystarczy nacisnąć Alt + Ins W Android Studio.

Po zadeklarowaniu zmiennych, otrzymasz gettery i settery w wygenerowanym kodzie.

 -5
Author: A_R Rehman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-09 20:37:02