NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

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
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;
}
 
Odpovědět
22.12.2012 12:41
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
22.12.2012 12:49
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.

 
Odpovědět
22.12.2012 13:37
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
22.12.2012 17:58
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
22.12.2012 18:16
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
+1
23.12.2012 15:32
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)

 
Odpovědět
20.10.2013 11:49
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
1.11.2013 15:27
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 24.11.2013 1:21
Odpovědět
24.11.2013 1:20
„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
+3
27.11.2013 9:29
New kid back on the block with a R.I.P
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.