W scenariuszu wydaje się, że rzeczywiste tworzenie obiektu odbywa się wewnątrz metody GetList()
. Tak więc twoja pierwsza próbka byłaby poprawnym użyciem.
Po utworzeniu Twój List<MyCustomClass>
jest przechowywany w stercie, a twój listCustClass
jest po prostu odniesieniem do tego nowego obiektu. Po ustawieniu parametru listCustClass na GetList()
wskaźnik referencyjny listCustClass
jest odrzucany i zastępowany wskaźnikiem odniesienia dla zwracanej wartości GetList()
(może być pusta). Kiedy tak się dzieje, oryginalny plik List<MyCustomClass>
nadal znajduje się w stercie, ale żadne obiekty go nie wskazują, więc marnuje zasoby, dopóki nie pojawi się Garbage Collector i nie wyczyści go.
Podsumowując za każdym razem, gdy tworzysz nowy obiekt, porzuć go, tak jak w drugim przykładzie, marnujesz pamięć, wypełniając stertę niepotrzebnymi informacjami.
Czy naprawdę pytasz, czy powinieneś pisać fabryki, czy nie? – annakata
Nie, myślę, że nie rozumie, że "nowy" oznacza wywołanie konstruktora i utworzenie nowego obiektu. W przeciwnym razie wiedziałby, że lepiej jest stworzyć nowy obiekt, a potem go wyrzucić. Być może pochodzi on z VB.NET, gdzie słowo kluczowe "New" może być częścią składni deklaracji, więc uważa, że tak właśnie jest w języku C#. –
Nie jestem pewien co do znaczników C# i .NET na tym, ponieważ jest to dość ogólne pytanie OOP. – Welbog