[C#] syntax error (???)

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Wikan 19. 10. 2021 17:08

Přijde mi, že ty moje odpovědi nečteš. Ten mezičlánek není potřeba vždy. Jenom pokud potřebuješ předat hodnoty zvenčí.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 19. 10. 2021 17:16

Nechápu pojem "předat hodnoty zvenčí"?
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 19. 10. 2021 17:30

Kód: Vybrat vše
class A
{
    public A(int number, bool status)
    {
       ...
    }

    ...
}

...

var a = new A(10, True);
...
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 19. 10. 2021 17:32

Jen odbočim, tady jednoduše třída A obsahuje konstruktor A, nic jinýho v tom nehledat... že? https://files.fm/u/8kmhzrqy8

-- 19. 10. 2021 18:48 --

https://www.youtube.com/watch?v=vn4hIZ3 ... 3&index=17 3:26

Proč mu vyjde, že cislo = 50, když zavolá druhej konstruktor? protože tam nastavil this.cislo = cislo? Pokud by teda napsal this.cislo = 222, bude hodnota "cislo" 222?
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 19. 10. 2021 17:52

Ano.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Just_jo 19. 10. 2021 18:25

Tak tato diskuze je teda síla.

Konstruktor většinou použiješ kvůli deklaraci dalších vnitřních proměnných.
Nemusíš mu předávat jen základní typy jako int a string apod. ale taky další objekty.

Než se nyní dotazovat na základy by bylo vhodné si přečíst informace o tom, co tu již bylo zmíněno - jako objekt, instance třídy konstruktor atd.

Podle informací od bývalého kolegy z práce, který šel na školu a měl tam programování ( dálkové ), tak začínali s C - pak se přišel chlubit jak umí převody soustav - bohužel věděl jen jak udělat převod do dvojkové soustavy - pro tří a více už nevěděl kolik sloupečků si má připravit :-D
Tak jsem mu po pár pokusech ukázal výpočet, kterým zjistí kolik sloupců potřebuje.

Tím jsem ale odbočil - nicméně tam taky probírali úplné základy - jelikož on v životě neviděl programování. A jelikož to měl dálkově ( víkendy ), tak to tam neprobírali dopodrobna tak, jak se ti tu snaží ostatní vysvětlovat. Tohle neuspěcháš ať se snažíš jak chceš - prvně si knihu pozorně a v klidu pročti, vyzkoušej si nějaké příklady, sžij se s MSVS a ještě jednou - čti. Těmito dotazy se budeš jen zdržovat, protože ty informace mají pro tebe nevyužitelný potenciál.

Wikan - já vždycky bral "void" spíš jako proceduru a zbytek jako funkci ( asi to bude zvykem z Pascalu / Delphi )
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod Alesh2020 20. 10. 2021 06:41

Juste, díky za projevenou pomoc, ale co je na diskuzi silného? Prostě musim nějak začít, kdybych to uměl, tak sem nepíšu. :hm Mě se nejlíp učí kucháním toho, co už nějak funguje, takže reverzním inženýrstvím.

PS: https://files.fm/u/y87u4hwf9 Tohle je taky samo o sobě konstruktor? :hm
Naposledy upravil Alesh2020 dne 20. 10. 2021 07:36, celkově upraveno 2
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 20. 10. 2021 07:20

Ne není. Konstruktor v C# nemá uvedený návratový typ (tady je void) a také se jmenuje stejně jako třída (a tady je to Main ve třídě Program).
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 20. 10. 2021 07:36

Jinak, doufám že sem ten autorův "vláček" (nechci psát řetězec, protože to v programování taky něco znamená) pochopil správně - https://files.fm/u/wvsyh7vrp - takže je to vlastně celé "jen na ukázku", protože pokud tam vždy napíše "this.cislo = cislo;", tak vlastně řekne "vem hodnotu se kterou jsi přišel, a zase ji vrať zpátky".

Jen nerozumim, proč program ignoruje hodnoty v prvním konstruktoru. Ano, true je pořád true, i na začátku programu (mluvím o řádku 7) ale v prvním konstruktoru (řádek 24) je "natvrdo" napsáno "cislo = 100;" Proč program ignoruje tyto "natvrdo" hodnoty? Když totiž autor videa nechá proběhnout program, zobrazí se mu, že číslo je "50", nikoliv "100". https://files.fm/u/c2c7xxap4
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 20. 10. 2021 07:46

Jen na ukázku je to zcela určitě.
vlastně řekne "vem hodnotu se kterou jsi přišel, a zase ji vrať zpátky"

To jsem úplně nepochopil.

proč program ignoruje hodnoty v prvním konstruktoru

Ale on je nijak neignoruje. Nastaví tu hodnotu na 100. Ale o kousek dál ji zase nastaví na 50. Však si zkus zavolat jenom první konstruktor a uvidíš, že je tam 100.
Kód: Vybrat vše
var a = new A();
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 20. 10. 2021 08:16

Kód: Vybrat vše
Ale on je nijak neignoruje. Nastaví tu hodnotu na 100. Ale o kousek dál ji zase nastaví na 50. Však si zkus zavolat jenom první konstruktor a uvidíš, že je tam 100.


https://files.fm/u/y87u4hwf9 Proto jsem se ptal, zda tohle je konstruktor. Pochopil bych, kdyby první konstruktor nastavil hodnotu na 100, a tento "nultý" ji zase nastavil na 50.

Ale když dostanu informaci, že tamto není konstruktor, tak sem vycházel z úvahy, že první konstruktor (který je volán jako poslední) nastaví hodnotu na 100, a už to tak zůstane. Kde se tedy ta hodnota 50 vzala?
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 20. 10. 2021 08:49

Probíhá to takhle:
1. třetí konstruktor zavolá druhý
2. druhý konstruktor zavolá první
3. vykoná se tělo prvního konstruktoru
4. vykoná se tělo druhého konstruktoru
5. vykoná se tělo třetího konstruktoru
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 20. 10. 2021 09:20

Aha, já uvažoval takle:

Třetí konstruktor se vykoná, a pak zavolá druhý.
Druhý konstruktor se vykoná, a zavolá první.
První se vykoná, a konec (protože mi bylo řečeno, že "nultý" konstruktor není konstruktor, tak už nemá co zavolat).

Zvláštní, ani v knize, ani ve videu toto nebylo zmíněno. Děkuji za info. :hm

---------------------------------

Ještě další věc, prosím.: Jak ten program pozná, že ty tři věci patří k sobě, když a.Vypis("Hello"); neobsahuje tag "str" a ty dvě zbylé položky dole neobsahují žádné "a", což je jméno té metody? Jak to pozná, že mám vypsat zrovna toto, kdybych třeba hned pod položku a.Vypis("Hello"); dopsal b.Vypis("Good bye"); ?

https://files.fm/u/y87u4hwf9
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 20. 10. 2021 09:35

Ve videu to naopak zmíněno bylo. Dokonce to tam i autor krokoval, aby bylo vidět, jak to probíhá.

Druhou část otázky nechápu, vůbec nesouvisí s přiloženým obrázkem. A nepoužívej prosím pojem "tag". Jak už jsem psal, C# nic takového nezná.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 20. 10. 2021 15:04

https://files.fm/u/wjdf2ay4c#/

Když autor řekne, že klíčové slovo "this" ukazuje jen na tento aktuální objekt, myslí tím jen na konstruktor "public A()",nebo na celou třídu "class A"?
Alesh2020
Junior
Uživatelský avatar

Předchozí stránkaDalší stránka