C# ASP.NET MVC - pytanie o ViewBag

0

Dzień dobry!,
mam pytanie, zacząłem się uczyć c# asp.net. Przekazałem parametr do widoku poprzez przypisanie go do ViewBag. Analizując kod zauważyłem że jest to obiekt zadeklarowany w taki sposób:

        public dynamic ViewBag { get; }

I tutaj powjawia się moje pytanie, dlaczego linijka typu :

ViewBag.Test = "Test";

Działa, skoro nie ma w nim słowa "set" ?
I jeszcze jedno pytanie, wiecie może jak to jest zrobione że w zmiennej ViewBag można stworzyć pole Test ? Jest to jakiś złożony typ danych ?

Z góry dziękuję za odpowiedź : ).

1

Działa, skoro nie ma w nim słowa "set" ?
I jeszcze jedno pytanie, wiecie może jak to jest zrobione że w zmiennej ViewBag można stworzyć pole Test ? Jest to jakiś złożony typ danych ?

Ta linijka ViewBag.Test = "Test"; nie ma nic wspólnego z setterem o którym mówisz. Bez settera nie możesz zrobić np. ViewBag = new Class1().
Co do drugiego pytania to po prostu tak działa dynamic w C#. Tutaj więcej o tym https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/dynamic

0

Samo dynamic tak nie działa, jest za tym jeszcze trochę więcej magii a mianowicie specjalny obiekt pod spodem o czym można poczytać chociażby tutaj:
How ViewBag in ASP.NET MVC works

0

Dziękuję za odpowiedzi, przeczytałem : )
Jednak dalej nie wiem dlaczego bez setera można ustawić obiekt, obstawiam że geter zwraca referencję do obiektu i dlatego można na nim działać ? Dlaczego jak jest, geter nie powinien zwrócić wartości? ( przesiadam się z c++ i jest to dla mnie nie jasne )

0

Tak zwraca referencję, w C++ o tym czy używać referencji decydujemy w momencie używania danego obiektu za pomocą operatora &. Natomiast w C# decydujemy w momencie pisania definicji typu - dla wszystkich obiektów typów zdefiniowanych przez słówko kluczowe "class" odwołujemy się za pomocą referencji, kolejny materiał do przeczytania :) :
Choosing Between Class and Struct

a tutaj jest nawet specjalna książka dla programistów C++ przechodzących na C#:
.NET Book Zero What the C or C++ Programmer Needs to Know About C# and the .NET Framework

1 użytkowników online, w tym zalogowanych: 0, gości: 1