Klasa obiekt operator new - dlaczego moja klase musze tworzyć

0

Witam,

Zaczynam się uczyć programować w C# i mam pewne pytanie, być może gdzieś ta wiedza mi umknęła podczas przerabiania tutoriali, mianowicie:
Piszę własną klasę np.działania z metodą dodawanie, aby jej użyć muszę stworzyć obiekt, czyli Dzialanie dzialanie = new Dzialanie();
Natomiast jeżeli korzystam z "klas systemowych", np. Console.WriteLine("tekst"); działa ona bez konstruowania.
Dlaczego? Skąd różnica? Czego nie wiem?

Drugie pytanie:
FileStream fsl = File.Create(path);

Nie do końca rozumiem ten zapis. Oczywiście w dokumentacji jest przykład, ale nie ma tam nic o metodzie, właściwości, konstruktorze File.Create. Więc skąd (poza przykładem) mogę wywnioskować z dokumentacji taki zapis ? Chciałbym nauczyć się rozumieć dokumentację. Będę wdzięczny za pomoc.

Pozdrawiam,
K.

7

Metody statyczne nie wymagają tworzenia obiektu w celu uzycia. Nie ma to nic wspólnego z tym czy klasa pochodzi z biblioteki standardowej czy nie.

1
hansikkk napisał(a):

Witam,

Zaczynam się uczyć programować w C# i mam pewne pytanie, być może gdzieś ta wiedza mi umknęła podczas przerabiania tutoriali, mianowicie:
Piszę własną klasę np.działania z metodą dodawanie, aby jej użyć muszę stworzyć obiekt, czyli Dzialanie dzialanie = new Dzialanie();
Natomiast jeżeli korzystam z "klas systemowych", np. Console.WriteLine("tekst"); działa ona bez konstruowania.
Dlaczego? Skąd różnica? Czego nie wiem?

Drugie pytanie:
FileStream fsl = File.Create(path);

Nie do końca rozumiem ten zapis. Oczywiście w dokumentacji jest przykład, ale nie ma tam nic o metodzie, właściwości, konstruktorze File.Create. Więc skąd (poza przykładem) mogę wywnioskować z dokumentacji taki zapis ? Chciałbym nauczyć się rozumieć dokumentację. Będę wdzięczny za pomoc.

Pozdrawiam,
K.

Tutaj masz:
https://docs.microsoft.com/en-us/dotnet/api/system.io.file.create?view=net-5.0

Zdefiniowałeś obiekt:
FileStream fsl, ale go nie zainicjowałeś (tak jak zrobiłeś to z "new Działanie()").
File.Create(), a konkretniej Create(), jest metodą statyczną klasy "File" , więc nie wymaga tworzenia obiektu klasy "File".
Metoda ta tworzy obiekt klasy "FileStream" a następnie go zwraca. W twoim przypadku przypisuje go do "fsl".

Tutaj masz klasę FileStream, gdzie na dole masz przykłady innych konstruktorów.:
https://docs.microsoft.com/en-us/dotnet/api/system.io.filestream?view=net-5.0

Popraw mnie ktoś jak się mylę.

0

Dziękuję za pomoc. Lekcja z klas static i no-static odrobiona.

Widzę że w opisie metody file.create() mamy:

Returns

FileStream

A FileStream that provides read/write access to the file specified in path.

Muszę jeszcze poszukać informacji co znaczy że metoda coś zwraca.
Czy zawsze jak metoda coś zwraca, to będzie zapis:
FileStrem(to co metoda zwraca) fsl (nazwa mojego obiektu) = File.Create(path);
Czy dobrze rozumiem, że jeżeli metoda File.Create() była by no-static, to zapis musiałby być taki:

File plik = new File(); 
FileStream fsl = plik.Create(path);

P.S.
Po prostu metody zwracają nie tylko int, string ale też mogą zwrócić obiekt (FileStream), tak?

Ok, znalazłem:
https://docs.microsoft.com/pl-pl/dotnet/csharp/linq/return-a-query-from-a-method

Zwracają też obiekty. Muszę to sobie poukładać i napisać parę kodów.

Na razie, BARDZO SERDECZNIE DZIĘKUJĘ ZA POMOC!

0
hansikkk napisał(a):

FileStrem(to co metoda zwraca) fsl (nazwa mojego obiektu) = File.Create(path);

Trochę na odwrót. "FileStream" to klasa której obiekt tworzysz. Nazwa obiektu się zgadza. " Create(path)" to metoda klasy "File" która zwraca obiekt klasy "FileStream".

Jeśli chodzi o metody (funkcje) i typy zwracane to masz tutaj:
część 1
i tutaj:
część 2

EDIT: Radziłbym zacząć od początku. Od definiowania funkcji itp., tą serię filmików o C# polecam, a dopiero potem zabranie się za zapisy do plików itp.

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