Mikuláš je tady! Získej 90 % extra kreditů ZDARMA s promo kódem CERTIK90 při nákupu od 1199 kreditů. Pouze do neděle 7. 12. 2025! Zjisti více:
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 6 - 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
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
bohmladislav
Člen
Avatar
bohmladislav:22.12.2012 12:41

Pokud vím, tak i C# může obsahovat céčkovské pointry. Stačí například třídu označit jako unsafe a potom můžete s atributy označenými * pracovat stejně jako s pointry v C++.
Unsafe nemusí být celá třída, ale stačí pouze určitý blok:

unsafe
{
int* ptrA;
}
Avatar
Kit
Tvůrce
Avatar
Odpovídá na bohmladislav
Kit:22.12.2012 12:49

Jenže ten, kdo si chce zachovat zbytky zdravého rozumu, takové hacky nepoužívá.

Odpovědět
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
bohmladislav
Člen
Avatar
bohmladislav:22.12.2012 13:37

Je pravda, že se to moc nepoužívá, ale není to hack, nýbrž normální součást tohoto jazyka. Například pokud někdo potřebuje provádět matematické výpočty, kde záleží na výkonu, a nechce dělat celý (třeba už hotový) program v C, tak to pro něj může být užitečné. Stačí mu udělat si část výpočtů s použitím pointerů a zbytek dělat v klasickém type safe kódu.

Avatar
Kit
Tvůrce
Avatar
Odpovídá na bohmladislav
Kit:22.12.2012 17:58

Pokud budu potřebovat dělat náročné matematické výpočty, tak tu dotyčnou funkci napíšu ve Fortranu a přilepím k aplikaci.

Odpovědět
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Kit:22.12.2012 18:16

Základní rozdíl mezi zásobníkem a haldou je v tom, že likvidace proměnných na zásobníku musí probíhat přesně v opačném pořadí, než v jakém vznikaly. To je velmi výhodné pro procesor, ale nevýhodné pro programátora, který potřebuje objekty likvidovat v pořadí dle vlastního uvážení. Proto vznikla i halda, která si však musí umět poradit s fragmentací paměti po uvolnění objektu. Defragmentaci řeší garbage collector.

Odpovědět
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:23.12.2012 15:32

Někdy vám nic jiného, než používat takovéhle "hacky", nezbyde, pokud používáte nějakou cizí knihovnu napsanou v C++ apod.

A ne vždy musí tyto unsafe operace být zlo, pokud by to mělo být jen pár řádků, tak dám přednost napsat to v unsafe C# než kvůli tomu vytvářet, importovat a volat knihovnu napsanou v jiném jazyce.

Odpovědět
https://www.facebook.com/peasantsandcastles/
Avatar
noName
Neregistrovaný
Avatar
noName:20.10.2013 11:49

Je nějaký rozdíl mezi:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
       {
           GC.Collect();
       }

a nebo když například instanci přiřadím hodnotu null?

Class1 C1 = new Class1();
...
C1 = null;

Jde mi o uvolnění paměti před zavřením daného Formu. (Form1 není hlavní form => po zavření Form1 program pokračuje)

Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:1.11.2013 15:27

Ani jeden z těch kódů paměť neuvolní. V prvním voláš GC.Collect, ale v tu chvíli Form stále existuje. Druhý kód jen dosadí do reference na formulář null, ale formulář dále existuje v paměti, dokud se nespustí GC.

Odpovědět
New kid back on the block with a R.I.P
Avatar
phoer
Člen
Avatar
phoer:24.11.2013 1:20

Je nějaký rozdíl mezi tímto :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Uzivatel z = new Uzivatel("", 23);
            Uzivatel x = new Uzivatel("", 42);

            z.jmeno = "Pepa Novotny";
            x.jmeno = "Pepa Masek";

            Console.WriteLine("z:{0}\nx:{1}\n", z, x);

            z = x;

            z.jmeno = "Petr Novotny";
            Console.WriteLine("z:{0}\nx:{1}\n", z, x);
            x.jmeno = "Karel Hynek";
            Console.WriteLine("z:{0}\nx:{1}\n", z, x);

            Console.ReadKey();

        }
    }
}

a tím co je v článku ? :)

Editováno
Odpovědět
„Co slyším, to zapomenu. Co vidím, si pamatuji. Co si vyzkouším, tomu rozumím.“ - Konfucius
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na phoer
David Hartinger:27.11.2013 9:29

Co je v článku se dá číst.

Odpovědět
New kid back on the block with a R.I.P
Nejnovější komentáře jsou na konci poslední stránky.
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 55.