Odwolanie do zmiennej klasowej bez tworzenia instancji obiektu

0

Nie do konca wiem do czego i w jakich przypadkach sie to uzywa, a zauwazylem to juz w ktorym kursie, tylko ze nikt mi tego nie wytlumaczyl.

Wiem ze klasy uzywa sie robiac ich instancje w taki sposob, KLASA zmienna = new KLASA() i uzywa sie dalej zmienna.Metoda/pole w klasie

Ale nie rozumiem uzywania KLASA zmienna; i koniec bez uzywania slowka new. jest to jakby wlasny typ zmiennej, pochodzacy z klasy ale co to oznacza i jak i w jakich przypadkach sie tego uzywa to nie wiem.

Tymbardziej ze widze ze gosciu odwoluje sie do KLASY bez utworzenia jej instancji,

I teraz ja sie pytam:

Moze cos pochrzanilem jak tak to mowcie

PS. Za bardzo nie wiedzialem jak to nazwac, wiec nie wiem czy i tytul jest odpowiedni, jak by co prosze o poprawke

0

Tymbardziej ze widze ze gosciu odwoluje sie do KLASY bez utworzenia jej instancji,

chodzi Ci o klasę statyczną (static)?

np.

int wynik = Kalkulator.Sumuj(5,5)

Po prostu niektóre rzeczy nie potrzebują instancji albo muszą być współdzielone pomiędzy wszystkie instancje, a klasa może czynić rolę takiego "pojemnika tematycznego"

np. w klasie Kalkulator mógłbym mieć jakieś metody Dodawanie(a,b)/Odejmowanie(a,b) gdzie wszystkie rzeczy potrzebne podaje jako parametry i wtedy jest to niezależne od instancji.

0

Nie static nie, bardziej chodzilo mi tutaj o

w tym przypadku mam cos takiego...

public** Samochod **PobierzSamochodOID(int samochodID)
        {
            return samochody.FirstOrDefault(s => s.ID == samochodID);
        }

jest to metoda dziedziczona po interfesie ktory zawiera ta metode i jest ona typu Samochod. Nie INT nie VOID tylko SAMOCHOD, DLACZEGO?

return, samochody jest typu List<Samochod> o to chodzi?

sory myslalem ze tutaj chodzi o zmienna, ale w tym przypadku chodzilo o metode. jak wyzej.

0

Metoda zwracaja Samochod zwraca właśnie obiekt typu samochód. Czyli w tej metodzie możesz stworzyć obiekt (zmienną) typu Samochod i zwrócić ja, tak aby kod wywołujący tą metodę mógł używać tego obiektu.

Z kolei List<Samochod> to kolekcja (lista) obiektów typu Samochod.

0

Za bardzo nie wiedzialem jak to nazwac, wiec nie wiem czy i tytul jest odpowiedni

Poszukaj pod hasłem stos vs sterta.

1
Szymon Zachariasz napisał(a):

jest to metoda dziedziczona po interfesie ktory zawiera ta metode i jest ona typu Samochod. Nie INT nie VOID tylko SAMOCHOD, DLACZEGO?

Bo ktoś sobie zażyczył stworzyć własną klasę Samochod, a nie ograniczać się do typów wbudowanych w standardową bibliotekę języka.
O to m.in. chodzi w programowaniu obiektowym, że można sobie definiować swoje klasy obiektów, a potem ich używać.
Generalnie polecam poczytać książkę o podstawach.

I przestań proszę, KRZYCZEĆ.

0

Oj tam krzyknalem tylko jednym slowem: )

PS i znow trafiam na to samo

private readonly ISamochodRepository _samochodRepository; 

public HomeController(IsamochodRepository samochodRepository)
{
}

Nie rozumiem tego jaki to wtedy ma typ. Typem jest wtedy klasa?

3

To jest konstruktor klasy HomeController, dlatego nie ma typu zwracanego. Konstruktor to taka specjalna jakby metoda, w której wykonywany jest kod podczas tworzenia obiektu danej klasy. (Czyli wtedy gdy woła się var x = new Klasa("abc", 3, false);.

Serio poczytaj o podstawach, ten kurs jest dla Ciebie zdecydowanie zbyt trudny.

1

A to nie jest czasem tak że on nie rozumie jakim typem jest ISamochodRepository? Tak czy inaczej, faktycznie musisz przerobić podstawy.

Jeśli do końca nie wiesz jakie to podstawy, to chodzi o programowanie obiektowe. Najlepiej zacznij od zera, na spokojnie. Upewnij się że rozumiesz zanim przejdziesz na następny etap. W razie wątpliwości pytaj.

0
private readonly ISamochodRepository _samochodRepository; 

public HomeController(IsamochodRepository samochodRepository)
{
    _samochodRepository = samochodRepository; // chyba tak
}

Tak w ogóle, to w takim kawałku kodu, w ASP.NET Core, jest jeszcze jeden szczegół - nigdzie nie ma jawnie podanego "new SamochodRepository()" czy czegokolwwiek w tym stylu, a następuje pewna magia, która nazywa się Dependency Injection - wstrzykiwanie zależności. ASP.NET Core sam stworzy w pewnym momencie obiekt typu takiego, który implementuje ISamochodRepository i go dostarczy do konstruktora HomeController.

Jaka konkretnie będzie klasa dostarczona do konstruktora - nie wiemy, ale będzie implementować ISamochodRepository. I ta wiedza powinna nam wystarczyć, uniezależniamy się od konkretnej implementacji.

(znaczy oczywiście wiemy, bo można zobaczyć na konfigurację Dependency Injection w pliku Startup.cs).

0

No mam cos takiego
services.AddTransient<ISamochodRepository, MockSamochodRepository>();

gosciu mowil o wstrzykiwaniu zaleznosci ale kompletnie nie rozumiem tego terminu

2

Kolego, przerób najpierw podstawy. Na rozumienie takich rzeczy przyjdzie czas. Jeśli to jest w kursie, to albo robisz go na szybko bez rozumienia rzeczy w nim zawartych, albo to bardzo źle zorganizowany kurs jest.

0

Chyba pytasz o składowe statyczne, które sa dostępne z pozimu klasy, a nie z poziomu obiektu ..

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