Object a znakový řetězec... – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Object a znakový řetězec... – .NET – Fórum – Programujte.comObject a znakový řetězec... – .NET – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

safranek
~ Anonymní uživatel
19 příspěvků
16. 10. 2021   #1
-
0
-

https://files.fm/u/xqkbybffq
Zdravím.
Jakej je přesně rozdíl mezi objectem a znakovým řetězcem (v tomto kontextu)? Děkuji.

Nahlásit jako SPAM
IP: 178.255.168.–
JerryM0
Super člen
16. 10. 2021   #2
-
0
-

žádná, v C# jsou už jenom objekty a i jednoduché proměnné jsou chápány jako objekty

metoda .ToString je metoda která ti pomůže převést třeba typ Int32 na String....používá se to dost často

třeba 

Int32 cislo = 0;

Console.WriteLine("{0}", cislo.ToString() );

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:5114:a736:1b44:8c3b...–
BDS+3
Věrný člen
16. 10. 2021   #3
-
+1
-
Zajímavé
Kit +

#1 safranek
ToString() je výpis objektu jako textu, tato metoda se dá přepsat takže může vypisovat cokoliv co programátor chce aby vypisovala

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
16. 10. 2021   #4
-
0
-

Chápu, takže:

Int32 cislo = 0

Int32 (mohl bych napsat i Int) je typ proměnné

cislo je název proměnné

0 je obsah proměnné 

Ale....  Console.WriteLine("{0}", cislo.ToString() );  | ta instance Console.Write.Line je ze třídy System.Text (asi) 

{0} je "placeholder", cislo je hodnota, co se místo toho placeholderu má zobrazit, a to "ToString()" je metoda? K čemu tam je, a proč je na konci?

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
16. 10. 2021   #5
-
+1
-
Zajímavé
Kit +

#4 safranek
já nevím proč ti s tím JerryM mate hlavu, a ještě to má navíc blbě, stačí:

int cislo = 45;

Console.WriteLine("{0}", cislo);

//vypíše: 45 

// když už s tím začal, na tomto příkladu to pochopíš:

int a=44, b=55, c=66;

Console.WriteLine("RGB={0},{1},{2}", a, b, c);
//vypíše: RGB=44,55,66
Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
BDS+3
Věrný člen
16. 10. 2021   #6
-
0
-

#4 safranek
Console.WriteLine vypisuje řádek do Konzolové aplikace

    class TestClass
    {
        private readonly int _hodnota;
        private readonly string _nazev;

        TestClass(string nazev, int hodnota)
        {
            _hodnota = hodnota;
            _nazev = nazev; //pro jednoduchost neřeším, že string může být null 
        }

        public override string ToString()
        {
            return string.Format("Nazev: {0}, Hodnota: {1}", _nazev, _hodnota);
        }
    }

//---------------------------------
...

TestClass A = new TestClass("blabla", 8);
string txt = A.ToString();
// do txt vloží text: Nazev: blabla, Hodnota: 8
...
Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
16. 10. 2021   #7
-
0
-

   

        TestClass(string nazev, int hodnota)
        {
            _hodnota = hodnota;
            _nazev = nazev; //pro jednoduchost neřeším, že string může být null 
        }

Dobře, to sem ani nevěděl, že můžeš definovat typ proměnné (string; int) v parametru instance třídy. Takže sis udělal třídu "TestClass" a v jejím parametru jsi nabušil, že proměnná typu string má název "nazev", a proměnná typu int má hodnotu "hodnota". Jakej maj pak ale smyslu ty položky "_hodnota = hodnota" a "_nazev = nazev". Proč ty _podtržítka a k čemu ty dva řetězce jsou?

TestClass A = new TestClass("blabla", 8);
string txt = A.ToString();

Tady chápu, jak je to "protagovaný https://files.fm/u/nurv69372 ", ale trošku mi nejde na mysl ten kus kódu. A dá se nějak zjistit, kolik (a v jaké formě zápisu) mi daná třída nabízí (mám říct instancí nebo metod?)

https://files.fm/u/w9um9r22w

K čemu mi takovej prográmek vlastně bude, když stejně nemohu změnit hodnoty?

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
16. 10. 2021   #8
-
0
-

#7 safranek

Máš zbytečně moc otázek, toto je pouze ukázka toho, k čemu může sloužit ToString(). Nic jiného v tom nehledej.


Dobře, to sem ani nevěděl, že můžeš definovat typ proměnné (string; int) v parametru instance třídy
Toto je konstruktor třídy, až budeš chápat konstruktory, tak pochopíš.

má název "nazev", a proměnná typu int má hodnotu "hodnota". Jakej maj pak ale smyslu ty položky "_hodnota = hodnota" a "_nazev = nazev". Proč ty _podtržítka a k čemu ty dva řetězce jsou?
Je to jen název, může se to jmenovat, třeba hatlapatla nebo _hatlapatla je to jedno, jde jen o to, aby to v dávalo nějaký smysl... já jsem si původně myslel, že Ti to pomůže v orientaci v ukázce

K čemu mi takovej prográmek vlastně bude, když stejně nemohu změnit hodnoty?
Teď je to k ničemu, někdy se používají ve třídách neměnné "proměnné", může jít třeba o identifikátor typ komprese dat v souboru, který jednou načteš při načítání souboru a po dekódování zahodíš.  Mohl jsem tam dát i klasickou proměnnou... Prostě, zvolil jsem jeden z 9999999999999 způsobů.  

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
JerryM0
Super člen
17. 10. 2021   #9
-
0
-

hele důchodče... dřív v C# .NET 4.7.2 a všeobecně ve starém .NET byla console součástí systému okenní aplikace vytvářené v C# ale to už teď v .NET core neni.... tam si musíš okno konsole vytvořit sám, chápeš jo ?  třeba když si chceš v průběhu vývoje okenní aplikace v C# WPF .NET5/6 dopřát komfort Console, musíš si to tam nahňahňat ručně:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using System.Diagnostics;
using System.Runtime.InteropServices;


namespace WPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ConsoleAllocator.ShowConsoleWindow();

            Console.WriteLine("Hello ");


        }
    }


    static class ConsoleAllocator
    {
        [DllImport(@"kernel32.dll", SetLastError = true)]
        static extern bool AllocConsole();

        [DllImport(@"kernel32.dll")]
        static extern IntPtr GetConsoleWindow();

        [DllImport(@"user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        [DllImport(@"kernel32.dll")]
        private static extern bool FreeConsole();


        const int SwHide = 0;
        const int SwShow = 5;


        public static void ShowConsoleWindow()
        {
            var handle = GetConsoleWindow();

            if (handle == IntPtr.Zero)
            {
                AllocConsole();
            }
            else
            {
                ShowWindow(handle, SwShow);
            }
        }

        public static void HideConsoleWindow()
        {
            var handle = GetConsoleWindow();

            ShowWindow(handle, SwHide);
            FreeConsole();
        }
    }

}
Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:55b4:d858:b160:9ee3...–
safranek
~ Anonymní uživatel
19 příspěvků
17. 10. 2021   #10
-
0
-

A] mě se konzole spustí hned a sama, jakmile vyberu položku pro spuštění rozdělaného projektu, pod volbou "Analyzovat". https://files.fm/u/cz2z5ykzq

B] kdes vyhrabala tu pitomost, že sem důchodce. Je mi 25, a začínám od nuly. :)

Nahlásit jako SPAM
IP: 178.255.168.–
safranek
~ Anonymní uživatel
19 příspěvků
17. 10. 2021   #11
-
0
-

Me jde o toto: kdyz se clovek uci napr. Armensky (prirozeny jazyk), musi se naucit armenske pismo (sice pri programovani se uzije latinka, ale plno apostrofu a zavorek ma tak specifickej vyznam, ze muzeme mluvit o atypickem pismu z 50%), potom slovicka (a to mi tady dela nejvetsi obavy, stale porad nevim presne, co vsechno muzu do toho kodu nabouchat, A HLAVNE, CO TO UDELA - a to je nejvetsi problem, a potom syntaxi (ta je i C#, ale tu mi do znacne miry opravi VS2019, stejne jako Word opravi chyby v pravopise).

O to mi jde...

Clovek se taky neuci cizi jazyk (ikdyz, u polstiny a srbochorvatstiny by to mozna slo) tim, ze otevre noviny, a tam se snazi tipnout/uhadnout vyznam ciziho slova, a kdyz se mu to nepovede, tak se pta na kazdy slovo nekoho... 

Nahlásit jako SPAM
IP: 178.255.168.–
JerryM0
Super člen
17. 10. 2021   #12
-
0
-

co je to ten nápis "konvertuj" tady na tom obrázku

https://files.fm/u/cz2z5ykzq

to neznám .. to je nějaká novinka ?

a ty seš z Arménie ?

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:55b4:d858:b160:9ee3...–
safranek
~ Anonymní uživatel
19 příspěvků
17. 10. 2021   #13
-
0
-

A] to tam VS2019 doplní sám, podle názvu projektu - když otevřu projekt faktorial, bude tam napsáno faktorial:  https://files.fm/u/4qvjjq2su

B] Z Arménie nejsem, uvedl sem to jako příklad toho, do jaké míry je učení přirozených i programovacích jazyků podobné, a do jaké míry nepodobné. 

Nahlásit jako SPAM
IP: 178.255.168.–
JerryM0
Super člen
17. 10. 2021   #14
-
0
-

aha no a ještě nám prozraď jaký typ toho projektu sis pro své začátky v C#  zvolil :

1/ MS VS 2019 C# WinForms .NET Framework 4.7.2 (4.8) ???

2/ MS VS 2019 C# WPF .NET Framework 4.7.2 (4.8) ???

3/ MS VS 2019 C# Console .NET Framework 4.7.2 (4.8) ???

4/ MS VS 2019 C# WinForms .NET core .NET5/6 ???

5/ MS VS 2019 C# WPF .NET core .NET5/6 ???

6/ MS VS 2019 C# Console .NET core .NET5/6 ???

7/ MS VS 2019 C# ASP MVC .NET core .NET5/6  Razor/Blazor ???

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:55b4:d858:b160:9ee3...–
BDS+3
Věrný člen
17. 10. 2021   #15
-
0
-

#11 safranek
Začni s tímto:

Soubor->Nový..->Projekt

Připojen obrázek.

pak zapomeň vše co jsi dosud četl v knihách, pak si poslechni tento tutoriál (je sice starší, takže se některé věci píšou trošku jinak - zjednodušují se, ale to nevadí) minimálně do lekce 43. V tom založeném projektu si to můžeš zkoušet. Až si pozorně poslechneš celý (16-43) tutoriál, tak budeš umět vše potřebné pro napsání prvních programů v konzole, a až pak se začni ptát, do té doby to nemá cenu. 

Potom se rozhodneš jestli budeš psát WPF, netCore, WF apd. tyto naučené základy použiješ všude.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
17. 10. 2021   #16
-
0
-

A] ten "projekt faktorial" byl dělanej podle té knihy.

B] No, jak říkám, já jel zatím jen podle knihy, takže:  https://files.fm/u/qfkczqtwe po každý konzolová aplikace (ale dělal sem i .dll) [červená], a po každý sem tam nechal ten .NET 3.1, [zelená].

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
17. 10. 2021   #17
-
0
-

#16 safranek
no to je právě net core, dle mého názoru pro úplného začátečníka, matoucí a zbytečné (pokud nemá velmi dobrou knihu psanou přesně pro net core)

Ty potřebuješ nejprve pochopit typy, konstruktory, reference.. úplné základy.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
JerryM0
Super člen
17. 10. 2021   #18
-
0
-

#16 safranek
.NET Core 3.1 je už bohužel zastaralá mrtvá technologie. :) teď už je .NET5 a od listopadu 2021 bude .NET6 :)

jestli neumíš vubec nic a chceš jenom začátky tak zvol

MS VS 2019 C# Console .NET Framework 4.7.2 (4.8)

nebo

MS VS 2019 C# Console .NET core .NET5/6

což je stejný, obojí je konzolová aplikace. Neni tam samozřejmě grafika ale jen text. Jsou tu ale rozdíly protože .NET core je novější a multiplatformní a většina knih je právě na starej .NET 4.7.2. Rozdíly se pak doučíš velmi rychle.... těch rozdílů moc neni.

Až budeš pokračovat časem dál tak se pak rozhodneš jestli chceš dělat jen desktop s knihovnou .NET5/6 WPF nebo se vrhneš na tvorbu webových stránek s ASP .NET5/6.

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:55b4:d858:b160:9ee3...–
safranek
~ Anonymní uživatel
19 příspěvků
18. 10. 2021   #19
-
0
-

BDS: ono je problém, že jeden z těch .NET core vybrat musím, nemůžu v tom VS2019 vybrat "nic". Když zvolím konzolové aplikace, tak mám na výběr z 3.1 a z 5.0.  https://files.fm/u/zfaxazhne

Úvaha byla, že starší znamená prověřenější, navíc se mi líbila ta hláška "Dlouhodobá podpora". A navíc v knize je přímo napsáno k tomuto kroku "... ponecháme přednastavenou volbu". 

Definici konstruktoru jsem vzal odtud (už předtím, než sem vůbec sem začal psát) : https://cs.wikipedia.org/wiki/Konstruktor a mohu to odrecitovat jak básničku, ale co si z toho jako člověk má odnést, to je mi záhadou...? 

Nahlásit jako SPAM
IP: 178.255.168.–
safranek
~ Anonymní uživatel
19 příspěvků
18. 10. 2021   #20
-
0
-

To video z odkazu ( https://www.youtube.com/watch?v=k2KqJEP05Z4 ) jsem zkusil, a hodilo to tento fajl https://files.fm/u/f9chrs8ap hned z počátku. Kde je problém? Přečtu to - nemůžeš to otevřít soubor Form1.cs [Design] 

To musí bejt nějaká pitomina, proč to cpe text "[Design]" do přípony?

Nahlásit jako SPAM
IP: 178.255.168.–
safranek
~ Anonymní uživatel
19 příspěvků
18. 10. 2021   #21
-
0
-

Na tom je nejdivnější, že jsem postupoval přesně podle videa, a navíc to bylo jen o o vytvoření prázdného projektu. A to, že tu mám vyšší verzi VS a .NET neznamená, že vytváření projektu je tak diametrálně odlišné. 

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
18. 10. 2021   #22
-
0
-

#19 safranek
zapni VisualStudioInstaller a nainstaluj toto:

Připojen obrázek.

ta chybová hláška s tím souvisí, ten tutoriál je dělaný v NET. Framework

Tutoriál začni jak jsem už psal lekcí 16, tam jsou první všeobecné věci co musíš vědět (díly 1-15 se věnují WindowsForms)

Nahlásit jako SPAM
IP: 94.113.253.–
W10 :)
JerryM0
Super člen
18. 10. 2021   #23
-
0
-

1/ jestli ses naprosto svobodně a samostatně rozhodl pro multiplatformní .NET core tak vybrat zásadně .NET5 protože je novější než 3.1 a od listopadu 2021 zvolit pak .NET6.  (starý .NET4.7.2/4.8 a starší verze je mrtvý)

2/ základy objektového programování v Csharp např. Learning Object Oriented Programming In C-sharp 5.0 Book.pdf  nebo  C sharp OOP Object-Oriented Programming [2011].pdf

objekty jsou stejné bez ohledu na knihovnu starou .NET nebo novou .NET core .NET5/6

tady máš knížky (soubor je RAR, heslo admin):

https://uloz.to/file/tvld0bPgVsgS/c-sharp-books-heslo-admin-zip#!ZJLmMGR1MTEuZQZ2A2SzZmSxZzD2H2qmIzyZD3OUJx9hZzAx

3/ sice nechápu proč se učíš programovat až v 25 ale ... ty to víš .. :)

4/ ideální by bylo kdyby ses přidal k nějaký firmě jako programátor junior :) protože dnes se vývoj v C# orientuje hlavně na ASP .NET5/6 pro web (je to nejlépe placené ale musíš znát i HTML5+CSS3+JavaScript) a dále pak pak C# UNITY pro hry a C#+WPF pro desktop (raritně i C#+WinForms) a jeden z těch tří směrů si budeš muset vybrat. Otázka je jestli spíš nechceš Javu a být programátorem v Javě v nějaký pražský bance za 160K měsíčně. Jestli se učíš programovat jenom pro radost tak to je v dnešní době pěkná blbost :)

5/ Na knihovnu .NET 4.x.x WindowsForm se vyser. Nikde ve firmě tě nezapěstnaj se znalostí této knihovny. Dnes se preferuje už jen - bohužel - knihovna .NET WPF (ta nová i ta stará). Slovo "[Design]" ti to tam cpe protože sis otevřel asi nejspíš starej WinForms (.NET WF) projekt a snažíš se dělat grafické uživatelské rozhranní. Otevři si projekt Console a nauč se nejdřív objekty a základy Csharp bez grafiky.

6/ WPF je náročnější než WF protože se vlastně musíš kromě Csharp naučit i XAML což je další jazyk nezbytný pro tvorbu GUI.

7/ Měl bys vědět, že Microsoft už zveřejnil nástupce knihoven WF a WPF a jmenuje se WinUI :)

https://microsoft.github.io/microsoft-ui-xaml/

a je multiplatformní. Opět nemá smysl se to učit pokud nejsi někde zaměstnán u nějaké firmy.

Chronologie knihoven od 90 let je: MFC (ta už se používá jen pro zastaralé projekty které se musí udržovat a je jen v C++), WinForms (opět zastaralá a je to nástupce MFC), WPF (stále aktuální a je to nástupce WinForms), WinUI - je to nástupce WPF a je zde plná podpora pro nové projekty od .NET6, a je to nejnovější knihovna.

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:6174:54cb:9128:ed3...–
safranek
~ Anonymní uživatel
19 příspěvků
18. 10. 2021   #24
-
0
-

BDS: a WindowsForms je něco špatnýho?

JerryM: Opět nemá smysl se to učit pokud nejsi někde zaměstnán u nějaké firmy.  > proč? 8-)

Nahlásit jako SPAM
IP: 178.255.168.–
safranek
~ Anonymní uživatel
19 příspěvků
18. 10. 2021   #25
-
0
-

PS: k tomu věku: někdy se prostě začít musí. Co je na tom tak divného? :-)

Nahlásit jako SPAM
IP: 178.255.168.–
JerryM0
Super člen
18. 10. 2021   #26
-
0
-

.NET WinForms je zastaralá knihovna z roku 2001, je sice předělaná do nového .NET core .NET5/6 ale problém je v tom, že ji firmy nechtějí. to znamená že v čr jako programátor nenajdeš práci v .NET WinForms. Ano, WinForms je skvělá ale ... v čr ji nikdo nechce, na západ od nás v Německu, Francii, USA atd. se běžně pro desktopové aplikace používá stejně tak jako knihovna MFC. ...jenomže ... češi .. to je "jiný" národ ...

dotaz "proč" se neučit WinUI .... no jde o to... třeba si skrytý milionář a nevíš co se životem :) v tom případě je pro tebe WinUI ideální :) :) :) :) :)

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:6174:54cb:9128:ed3...–
BDS+3
Věrný člen
18. 10. 2021   #27
-
0
-

#24 safranek
Ve Windows Forms můžeš napsat všechny běžné aplikace (něco jako je notepad, malování, kancelářské programy, přehrávače hudby, databáze, správce souborů, systémové nástroje..), ale především chybí automatické přizpůsobení DPI (toto lze vyřešit, že aplikaci sestavíš v NET.Core), hardwarové urychlení grafiky, a to že všechny ovládací prvky musí být v jednom vlákně). Je to starší věc, která nepočítá se podivnými displeji (zoomování aplikace lze provést i ve WF, ale dá to větší práci než ve WPF - pokud ovládáš XAML). Ale na druhou stranu, napsat program v ve WF je nejsnadnější. Ale zase pokud se začneš učit ve WF, přecházet na WPF bude pro tebe těžší. Největší mínus je asi to, že je to zastaralý způsob.

Já dělám aplikace ve WF, protože když jsem se začínal učit programovat, tak nic jiného nebylo a teď už jsem líný se učit něco jiného. (Jednu dobu jsem zkoušel i WPF, ale zjistil jsem, že to co potřebuju udělám i WF, ale mnohem rychleji.) Programování mám jako koníčka, takže to, že  je WPF dobře placené mi je celkem jedno.

Pokud se programování chceš věnovat roky, nebo psát pro více systémů, nebo graficky náročnější vícevláknové aplikace nebo hry doporučuju se věnovat WPF - xamlu než WF.

Nicméně tutoriálem, který jsem zde uvedl (od dílu 16) nic nezkazíš -  je univerzální.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
BDS+3
Věrný člen
18. 10. 2021   #28
-
0
-

Ještě jsem zapomněl důležitou výhodu WPF, a to je snadné stylování a přestylování aplikací a pokročilý data-binding. Ve WF se styly musí řešit "ručním" překreslováním komponent a nebo překreslováním pomocí bitmap. U WPF jsou na to nástroje už i v designeru (zaoblení, přechody, stíny..)

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
19. 10. 2021   #29
-
0
-

JerryM: za zaslané soubory děkuji.   

Nahlásit jako SPAM
IP: 178.255.168.–
safranek
~ Anonymní uživatel
19 příspěvků
19. 10. 2021   #30
-
0
-

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

Proč má výsledek, že cislo = 50, když vybere 2. konstruktor? Protože nastavil this.cislo = cislo? Pokud by teda napsal this.cislo = 222, bude hodnota "cislo" 222?

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
19. 10. 2021   #31
-
0
-

#30 safranek
protože první konstruktor bez parametru new A() nastavuje cislo na 100, ale druhý konstruktor nastavuje proměnnou podle uvedeneho parametru new A(nejake_cislo_int) nastaví cislo dle uvedeneho parametru
to znamená, že A aa = new A(123); by nastavilo hodnotu aa.cislo na 123 

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
19. 10. 2021   #32
-
0
-

https://files.fm/u/utmd28ube

Takže tohle 1. je taky konstruktor sám o sobě? Ale v 2. tom druhém konstruktoru parametr "new A(nejake_cislo_int)" není. 

A jen tak naokraj, proč máš to "aa" takle zdvojené? 

A aa = new A(123)

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
19. 10. 2021   #33
-
0
-

#32 safranek

nějak nerozumím na co se ptáš

int nejake_cislo = 145;

A aaa = new A(nejake_cislo);

aaa.cislo bude 145;

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

A je typ třídy,

aa je její název, může se to jmenovat jak chce třeba bbbb nebo dhjsgfhkgfn

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
19. 10. 2021   #34
-
0
-

aa je její název, .> divil jsem se, protože on tam má jed jedno malé a. A tím myslíš jméno instance?

"A je typ třídy" Já žil v domněnce, že když napíšu "class A", tak velké A je název třídy, ne TYP. 

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
19. 10. 2021   #35
-
0
-

#34 safranek
v jazycích C, C++, C#, se píše jako první typ objektu a za ním jeho název (nebo čárkou oddělené názvy).

int i;

int x, y, z;

string caption, text;
A instance1, instance2;
A instance3;
Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
BDS+3
Věrný člen
19. 10. 2021   #36
-
0
-

#34 safranek

class si můžeš představit jako obecnou bednu, kterou musíš "otypovat", tedy určit jaké bude mít možnosti 

class BednaSVercajkem
{
 public int pocetKladiv = 0;
 public int pocetSroubovaku = 0;
 public int pocetHasaku = 0;

 public bool JePrazdna()
 {
  return (pocetKladiv==0 && pocetSroubovaku==0 && pocetHasaku==0);
 }
}

class BednaSOvocem
{
 public int pocetKusu = 0;
 public DateTime spotrebovatDo;
 public string druhOvoce = "?";

 public bool JePrazdna()
 {
  return (pocetKusu == 0);
 }
}

a ty bedny pak můžeš použít, tak že jim dáš nějaké názvy:

BednaSVercajkem KarlovaBedna = new BednaSVercajkem() , VojtovaBedna = new BednaSVercajkem();
BednaSOvocem bednaHrusek = new BednaSOvocem(), bednaJablek = new BednaSOvocem();

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
20. 10. 2021   #37
-
0
-

A instance1, instance2; A instance3;
> mělo tam bejt i "A instance 2"  ?

class si můžeš představit jako obecnou bednu, kterou musíš "otypovat", tedy určit jaké bude mít možnosti 

> No právě, takže jde jen o zažitý pojem. Já si to tak myslel, ale raděj jsem se zeptal, protože pod pojmem "typ" si představím právě "int, bool, double apod"

Nahlásit jako SPAM
IP: 178.255.168.–
safranek
~ Anonymní uživatel
19 příspěvků
20. 10. 2021   #38
-
0
-

PS: https://files.fm/u/y87u4hwf9   Tohle je taky samo o sobě konstruktor?

Nahlásit jako SPAM
IP: 178.255.168.–
20. 10. 2021   #39
-
0
-

#36 BDS
A ted mu vysvětli dědičnost: BednaSjabkama, BednaShruskama ...

hu

Nahlásit jako SPAM
IP: 195.178.67.–
BDS+3
Věrný člen
20. 10. 2021   #40
-
0
-

#37 safranek
> mělo tam bejt i "A instance 2"  ?

Nemusí, je to na začátku dokud se tam nedá středník, ale čárka tak to furt platí. Ale tohle jsi si mohl ověřit ve visualstudiu.

> .."typ" si představím právě "int, bool, double apod"..

 V podstatě máš pravdu on to není hodnotový typ jako int apd. Jde o uživatelsky definovaný referenční typ. Přesné názvosloví není pro mě podstatné, nikdy jsem se ho neučit. Tady je o tom nějaké povídání, možná je tam taky pro tebe něco pro pochopení.

>Tohle je taky samo o sobě konstruktor?

ne, to je statická metoda (funkce), která se spouští vždy po startu programu

Nahlásit jako SPAM
IP: 94.113.253.–
W10 :)
BDS+3
Věrný člen
20. 10. 2021   #41
-
0
-

#39 hlucheucho
kdyby nebyl líný, tak si spustí tutoriál, tam to taky vysvětluje

(mám strach, že spustím lavinu dalších otázek, proto jsem tam dědičnost nedal, i když se strašně nabízí)

Nahlásit jako SPAM
IP: 94.113.253.–
W10 :)
safranek
~ Anonymní uživatel
19 příspěvků
20. 10. 2021   #42
-
0
-

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/…syh7vrp ; - 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

Nahlásit jako SPAM
IP: 178.255.168.–
20. 10. 2021   #43
-
0
-

Pozor při inicializaci proměnných: 

int a, b = 2;	//inicializuje jen b, b=2

Proto píšu každou proměnnou na samostný řádek. Navíc pak ke každé proměnné můžu napsat "její vlastní" komentář. Málokdy je to v praxi tak jednoduché jako

float a, b, c;	//strany trjuhelniku

hu

Nahlásit jako SPAM
IP: 195.178.67.–
20. 10. 2021   #44
-
0
-

Z #40 usuzuji, že konstruktor nastaví instanci na 100 a pak volání metody to změní na 50.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
BDS+3
Věrný člen
20. 10. 2021   #45
-
0
-

#42 safranek
samozřejmě jde jen o ukázky, aby bylo poznat, že se hodnota změnila

reálnější je tento příklad: 

class C
{
 uint tag = 0;
 string title;

 public C()
 {
  title=string.Empty; //doplní prázdný řetězec, aby title nebylo null
 }

 public C(int Tag)
 : this() //spustí konstruktor bez parametru
 {
  tag=Tag;
 } 
}
Nahlásit jako SPAM
IP: 94.113.253.–
W10 :)
20. 10. 2021   #46
-
0
-

Aby to nebylo tak abstraktní, něco ze života. Určitě jsi zaregistroval reklamu, že banka ti dá 1000,-Kč na vyzkoušení účtu, když si ho založíš. Při zakládání účtu banka provede "parametrický konstruktor": 

Ucet jmeno_uctu = new Ucet(1000);

Nyní máš svůj nový účet a je na něm 1000,-Kč. První transakce, která proběhne, je připsání výplaty od tvého zaměstnavatele, banka provede "metodu", která k zůstatku účtu přičte příchozí platbu:

decimal vyplata = 20000;	//z dat banky tveho zamestnavatele se tvoje banka dozvedela, kolik pripsat
jmeno_uctu.Prichozi(vyplata);

a na účtu už není 1000,-Kč, je tam 21000,-Kč.

Druhý příklad: ráno vstaneš s úsměvem. pak mne potkáš a já ti řeknu nějakou hrubou urážku. Během chvilky budeš nasranej a místo pozdravu mi rozbiješ hubu.

V obou případech se stav instance vlivem "volání metody" a "vnitřní logiky" změnil. Jak je vidět, virtuální svět má mnoho společného s reálným světem.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Object to string — založil Anonymní uživatel

Problem in Object — založil neimenuje

Třída object v c++ — založil Porcepoque

Object slides — založil AccOuNTi

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý