Przyzwyczaiłem się do wielu środowisk Java IDE ( Eclipse , NetBeans i IntelliJ IDEA ) udostępniających polecenie wygenerowania domyślnego konstruktora dla klasy na podstawie pól w klasie.
Na przykład:
public class Example
{
public decimal MyNumber { get; set; }
public string Description { get; set; }
public int SomeInteger { get; set; }
// ↓↓↓ This is what I want generated ↓↓↓
public Example(decimal myNumber, string description, int someInteger)
{
MyNumber = myNumber;
Description = description;
SomeInteger = someInteger;
}
}
Posiadanie konstruktora wypełniającego wszystkie pola obiektu jest tak powszechnym zadaniem w większości języków OOP, zakładam, że istnieje sposób, aby zaoszczędzić czas, pisząc ten standardowy kod w C #. Jestem nowy w świecie C #, więc zastanawiam się, czy brakuje mi czegoś fundamentalnego w tym języku? Czy jest jakaś opcja w programie Visual Studio, która jest oczywista?
W programie Visual Studio 2015 Update3 mam tę funkcję.
Wystarczy zaznaczyć właściwości, a następnie nacisnąć Ctrl+, .a następnie nacisnąć Generuj konstruktor .
Na przykład, jeśli zaznaczyłeś dwie właściwości, zasugeruje ci utworzenie konstruktora z dwoma parametrami, a jeśli wybrałeś trzy, zasugeruje jeden z trzema parametrami i tak dalej.
Działa również z programem Visual Studio 2017.
źródło
public int Age { get; }
) Muszą mieć określone at setters, nawet jeśli tymczasowo, aby opcja była dostępna. Przetestowano w społeczności VS2015; nie jestem pewien, czy zostało to naprawione w VS2017.C # dodał nową funkcję w programie Visual Studio 2010 o nazwie Generuj na podstawie użycia. Celem jest wygenerowanie standardowego kodu na podstawie wzorca użycia. Jedną z funkcji jest generowanie konstruktora na podstawie wzorca inicjalizacji.
Ta funkcja jest dostępna za pośrednictwem inteligentnego tagu, który pojawi się po wykryciu wzorca.
Na przykład, powiedzmy, że mam następującą klasę
W mojej aplikacji piszę co następuje
Konstruktor pobierający
int
kod nie istnieje, więc pojawi się tag inteligentny, a jedną z opcji będzie „Generuj kod konstruktora”. Wybranie tego spowoduje zmodyfikowanie kodu naMyType
następujący.źródło
Możesz napisać makro, aby to zrobić - użyjesz parsera programu Visual Studio do pobrania informacji o członkach klasy.
Napisałem podobne makro. (Podzielę się kodem poniżej). Makro, które napisałem, służy do kopiowania w przód wszystkich konstruktorów w klasie bazowej podczas dziedziczenia po nim (przydatne w przypadku klas takich jak Exception, które mają wiele przeciążeń na ctor).
Oto moje makro (ponownie, to nie rozwiązuje twojego problemu, ale prawdopodobnie możesz zmodyfikować, aby robić to, co chcesz)
źródło
Od wersji Visual Studio 2017 wygląda na to, że jest to funkcja wbudowana. Naciśnij Ctrl+, .gdy kursor znajduje się w treści klasy, i wybierz „Generuj konstruktor” z listy rozwijanej Szybkie akcje i refaktoryzacje .
źródło
Oto makro, którego używam do tego celu. Wygeneruje konstruktora z pól i właściwości, które mają prywatny ustawiacz.
źródło
Może mógłbyś spróbować tego: http://cometaddin.codeplex.com/
źródło
Możesz to łatwo zrobić za pomocą ReSharper 8 lub nowszego. Fragmenty
ctorf
,ctorp
ictorfp
generują konstruktory, które wypełniają wszystkie pola, właściwości lub pola i właściwości klasy.źródło
Oto makro JMarsha Visual Studio zmodyfikowane w celu generowania konstruktora na podstawie pól i właściwości w klasie.
źródło
W przypadku programu Visual Studio 2015 znalazłem rozszerzenie, które właśnie to robi. Wydaje się, że działa dobrze i ma dość dużą liczbę pobrań. Więc jeśli nie możesz lub nie chcesz używać ReSharper, możesz zamiast tego zainstalować ten.
Możesz go również uzyskać za pośrednictwem NuGet .
źródło
Używam następującej sztuczki:
Wybieram deklarację klasy z członkami danych i naciskam:
Ctrl+ C, Shift+ Ctrl+ C, Ctrl+ V.
PROGRAM pobiera deklarację ze schowka, znajduje nazwę klasy, znajduje wszystkie składowe i ich typy, generuje konstruktor i kopiuje wszystko z powrotem do schowka.
Robimy to ze studentami pierwszego roku na mojej praktyce "Programowanie I" (Uniwersytet Karola w Pradze) i większość studentów robi to do końca.
Jeśli chcesz zobaczyć kod źródłowy, daj mi znać.
źródło