Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 6. diel - Referenčné a hodnotové dátové typy

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej 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
Odpovedá na bohmladislav
Kit:22.12.2012 12:49

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

Odpovedať
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
Odpovedá 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.

Odpovedať
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.

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovedá 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.

Odpovedať
https://www.facebook.com/peasantsandcastles/
Avatar
noName
Nevyplnené
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
Odpovedá 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.

Odpovedať
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 ? :)

Editované
Odpovedať
„Co slyším, to zapomenu. Co vidím, si pamatuji. Co si vyzkouším, tomu rozumím.“ - Konfucius
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na phoer
David Hartinger:27.11.2013 9:29

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

Odpovedať
New kid back on the block with a R.I.P
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 55.