NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 5 - Referenční a hodnotové datové typy

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar

Člen
Avatar
:16.1.2015 8:39

Díky za článek, C# mi zatím přijde oproti C dosti sympatický, tak uvidíme jak dál. Jen pár postřehů, ten kód není třeba kontrolovat řádku po řádce, když se použije mudflap nebo valgrind nebo jiná alternativa. A uvolněný pointer by měl člověk správně po uvolnění nastavit na NULL.

 
Odpovědět
16.1.2015 8:39
Avatar
pracansky
Člen
Avatar
pracansky:12.4.2015 21:45

Dovolil bych si říct že stejný program v C# mi zabere třetinu času než v C a bude v něm méně chyb přesto že C znám lépe. Jednoduše se můžu zabývat tím co je podstatné a neřešit provozní problémy.

To že se programátor nemusí starat o správu paměti je ale zavádějící. Když začne pracovat s větším množstvím dat, je potřeba se zamyslet nad tím kdy a proč se paměť alokuje.

Ani alokace ani Garbage collector totiž nejsou zadarmo.

Osobně si myslím že psát aplikace pro PC v C/C++ dnes může jen masochista:)

 
Odpovědět
12.4.2015 21:45
Avatar
Hello World
Člen
Avatar
Hello World:28.8.2015 11:41

Petřeboval bych poradit jak se dá nějakému refernčnímu datovému typu přiřadit hodnota tak, aby se nevytvořil odkaz na jiný objekt, ale aby se hodnota "zkopírovala." Mám kód

IntPtr handle = window.Key; //window je položka v IDictionary<IntPtr, string>
string title = window.Value;

icons.Add(new TaskbarIcon(Icon.FromHandle(handle)) { ToolTip = title });

Jenže po tom co se ikona přiřadí k TaskBarIcon mi to vyvolá ObjectDispose­dException, takže bych potřeboval vědět, jak se dá hodnota zkopírovat z jednoho objektu na druhý.

Odpovědět
28.8.2015 11:41
Jo! Zkompilovalo se to!
Avatar
MrPabloz
Člen
Avatar
Odpovědět
28.8.2015 13:23
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
Hello World
Člen
Avatar
Odpovědět
28.8.2015 13:28
Jo! Zkompilovalo se to!
Avatar
RooBoo
Člen
Avatar
RooBoo:27.1.2016 13:23

Ahojte neviem ci to tak ma byt ale ak napisem

public override string ToString()
        {

        }

tak mi VS automaticky hodi do {}

return base.ToString();
 
Odpovědět
27.1.2016 13:23
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na RooBoo
pocitac770:27.1.2016 16:21

Každá metoda, která má návratový typ (v tomto případě .ToString()) ho musí i vracet, na to je tam ono slovo return, a aby nenastala chyba kvůli chybějícímu "návratovému" řádku kódu, tak tam rovnou vloží ten předdefinovaný, který si můžeš upravit podle potřeby na co chceš.

Editováno 27.1.2016 16:22
 
Odpovědět
27.1.2016 16:21
Avatar
blazoid
Člen
Avatar
blazoid:10.5.2016 20:23

Ahoj, mám problém s opětovným vytvořením instance objektu, konkrétně jde o zatížení operační paměti. V kódu níž (jde o Windows forms aplikaci) se při stisknutí tlačítka "loadFileBtn" provede načtení datalogu do listu - otevřu dialogové okno, vyberu soubor, cestu k souboru následně předám v konstruktoru třídy sprava_dat, instance třídy se jmenuje "databáze". Problém nastane, když chci načíst za běhu programu jiný soubor. Stisknu opět tlačítko load... a dám načíst totožný soubor jako před tím. Try/catch blok již však není proveden, krokováním jsem zjistil, že provádění selže právě u metody databaze.Nacti­Log(), právě v této metodě probíhá stream reading načítaného souboru a ukládání do listu. Dle ukazatele využití paměti ve VS nedojde po opětovném vytvoření instance třídy sprava_dat k uvolnění. Zkusil jsem po přiřazení databaze = null, což následuje hned po vytvoření nové instance, zavolat garbage collector, situace se však nezměnila. Načítaný csv soubor má poměrně dost řádků (cca 8400).

Píšu to sem, neboť se mně zdá, že právě tento článek se problematiky dotýká...

Díky moc za případnou pomoc.

private void loadFileBtn_Click_1(object sender, EventArgs e)
{

    // procedura pro výběr souboru, vytvoření instance databáze a načtení hodnot do databáze

    OpenFileDialog opf = new OpenFileDialog();

    opf.Filter = "Choose File(*.csv) | *.csv";


    if (opf.ShowDialog() == DialogResult.OK)
    {
        fileSource = opf.FileName;
        loadedFileNameLabel.Text = fileSource;

        fileCreationTimeLabel.Text = Convert.ToString(File.GetCreationTime(fileSource));
    }

    databaze = null;

    GC.Collect();

    databaze = new sprava_dat(fileSource);



    int pocet_zaznamu = 0;
    try
    {
        pocet_zaznamu = databaze.NactiLog();
       // datalogListBox.Items.Clear();
        //datalogListBox.Items.AddRange(databaze.VratVsechny());

        pocetZaznamuTB.Text = pocet_zaznamu.ToString();


        dataGridView1.DataSource = databaze.VratVsechny();

        loadingDataLogGridView.DataSource = databaze.VypisLoadingLog(infoCheckBox.Checked, warningCheckBox.Checked, errorsCheckBox.Checked);


    }
    catch
    {
        MessageBox.Show("Databázi se nepodařilo načíst, soubor zřejmě neexisituje.",
                "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error);

        pocetZaznamuTB.Text = "-";
    }

}
 
Odpovědět
10.5.2016 20:23
Avatar
Miroslav Mazal:16.8.2018 21:49

Celkem to chápu. Má to nějaké praktické uplatnění? Například ovlivní to způsob, jak něco programátor programuje, nebo to má pouze pomoci pochopit práci počítače a jeho paměti?

 
Odpovědět
16.8.2018 21:49
Avatar
vosa53
Člen
Avatar
Odpovídá na Miroslav Mazal
vosa53:17.8.2018 0:16

Ano je to velice praktické. :) Když například v nějaké hře máte jednu instanci třídy Tank (předáváno referencí) na několika místech a na jednom z nich mu snížíte zivot, tak přirozeně očekáváte že ho bude mít snížený i na všech ostatních místech. Oproti tomu když předáváte jen nějaké číslo (předáváno hodnotou), tak je nežádoucí aby se jeho možná pozdější změna projevila všude kam bylo předáno.

 
Odpovědět
17.8.2018 0:16
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 54.