Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 14 odgovora
  • 4.402 pregleda

Najnovija ↓

Jel ovo boxing/unboxing 21.07.2007. u 22:50 · pre 234 meseca #1
Code:

public static void Main(string[] args)
        {
            //ovaj prvi deo bi mi bio boxing
            int i = 32;
            broj x = new broj();
            x.f_xxx = i;
            Console.WriteLine(x.f_xxx); // <--
            Console.WriteLine(i);
            // ovo dole je predpostavljam unboxing
            int g = 0;
            g = x.f_xxx;
            Console.WriteLine(g);
        }
        class broj
        {
            public int f_xxx;
        }


Jel se ovako upotrebljava box/unbox?
I da koja je razlika izmedju int i Int32, tj. ima li neko pravilo kada se sta koristi?
Re: Jel ovo boxing/unboxing 21.07.2007. u 23:31 · pre 234 meseca #2
Citat:
Valerij Zajcev: Jel se ovako upotrebljava box/unbox?
I da koja je razlika izmedju int i Int32, tj. ima li neko pravilo kada se sta koristi?

Koliko vidim uopšte nemaš boxing, a samim tim ni unboxing. Kapiraš li razliku između value i reference promenljivih?

Nema razlike između int i Int32.
Re: Jel ovo boxing/unboxing 21.07.2007. u 23:57 · pre 234 meseca #3
Evo ga box-ing:
Console.WriteLine(x.f_xxx); // <--
pošto je f_xxx tipa integer on se mora prvo "spakovati" u object tip. U C++ for .NET se moralo i izričito navoditi ovako:
Console.WriteLine( __box(x.f_xxx)); // <--
a u C#-u se to radi implicitno..

Dalje,
// ovo dole je predpostavljam unboxing
int g = 0;
g = x.f_xxx;.
nema ovde unboxing-a nigde.

Ali evo ga box-ing opet:
Console.WriteLine(g);
Potpis
Expert Opinions - Niche Articles
Re: Jel ovo boxing/unboxing 22.07.2007. u 00:24 · pre 234 meseca #4
Citat:
toxi_programer: Evo ga box-ing:
Console.WriteLine(x.f_xxx); // <--
pošto je f_xxx tipa integer on se mora prvo "spakovati" u object tip.

Zašto? WriteLine ima overload Console.WriteLine (Int32).
Re: Jel ovo boxing/unboxing 22.07.2007. u 13:38 · pre 234 meseca #5
Hm... Heh... :) Pa da.
Ali boxing bi se "desio" o npr. ovakvoj situaciji:
Console.WriteLine("Moj broj je: {0}", 16);

U svakom slučaju, Valerij Zajcev, još primer za boxing je:
Code:

ArrayList ar = new ArrayList();
int broj = 16;
ar.Add( broj); // za ovo bi u C++ morao da napišeš:   ar->Add( __box( broj)); dakle u ovoj liniji se "prevodi" int u Object


Potpis
Expert Opinions - Niche Articles
Re: Jel ovo boxing/unboxing 22.07.2007. u 14:20 · pre 234 meseca
izmenjeno 1 put, poslednji put mmix 22.07.2007. u 14:35
  1. mmix22.07.2007. u 14:35zapis iz teksta poruke
#6
AKo posmatrate lingvisticki onda je to primer boxovanja, ali ako gledamo tehnocloski boxing u .NETu je nesto potpuno drugo. Boxing je mogucnost da value type uboxujes u reference type (da bi ga koristio kao reference), na da zadrzis valuetype kao polje reference tipa.

To se radi preko object tipa:
Code:

int x = 21;

object xo = x;   // boxing

Console.Write(xo);    // posto je parametar object, write poziva ToString() koji vraca 21, ovo nije unboxing

int y = (int)xo;     // unboxing, y postaje 21 kao value "kopija" xo-a

x = 42;    // boxed integer nije pokazivac na x, promena x-a ne menja xo


int je kompajlerski alijas za System.Int32 i tako ce i ostati. Mislim da je inicijalni plan bio da se int vezuje za bitnost platforme (tj, da kompajlirano za 64bita int bude alias za System.Int64), ali se od toga odustalo, i na 64-bit platformi int predstavlja int32.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Jel ovo boxing/unboxing 22.07.2007. u 14:33 · pre 234 meseca #7
zbunjuje me sto su svi primeri na koje naidjem napisani upotrebom object:
i = 3;
object o = i;
Nasao sam da je objekt u stvari alias za System.Object
Ali u mom primeru x je ref na objekat klase broj, znaci da je ref tipa, ako kazem x = i; prijavi compile time gresku kada stavim x.f_xxx = i; sve je ok, ovaj je ref tipa ovaj je value i radi, i zato sam ja mislio da je to box.
Re: Jel ovo boxing/unboxing 22.07.2007. u 14:58 · pre 234 meseca #8
Citat:
mmix:

int je kompajlerski alijas za System.Int32 i tako ce i ostati. Mislim da je inicijalni plan bio da se int vezuje za bitnost platforme (tj, da kompajlirano za 64bita int bude alias za System.Int64), ali se od toga odustalo, i na 64-bit platformi int predstavlja int32.

Hm, i ja sam mislio da će integer pratiti bitnost platformew. Zanimljiva informacija...
Re: Jel ovo boxing/unboxing 22.07.2007. u 15:25 · pre 234 meseca #10
Za zavisnost od platforme postoji IntPtr, pa kome treba...
Re: Jel ovo boxing/unboxing 22.07.2007. u 15:33 · pre 234 meseca #11
@mmix, object xo = x; // boxing, kapiram da umesto object moze da stoji i ArrayList jer je to ref tipa, ali kako bi onda izgledalo da imam klasu "class Klasa" i objekat, Klasa ime = new Klasa(); Ime je ref tipa zasto kada stavim "i = 5; ime = i;" dobijam gresku?
Re: Jel ovo boxing/unboxing 22.07.2007. u 17:09 · pre 234 meseca #13
Citat:
Valerij Zajcev: @mmix, object xo = x; // boxing, kapiram da umesto object moze da stoji i ArrayList jer je to ref tipa, ali kako bi onda izgledalo da imam klasu "class Klasa" i objekat, Klasa ime = new Klasa(); Ime je ref tipa zasto kada stavim "i = 5; ime = i;" dobijam gresku?


E pa tu ti je logicka greska ;), ne moze da stoji ArrayList, ako stoji ArrayList onda nije boxing. Boxing moze samo i iskljucivo iz value tipa (int, double, itd) u object tip. Pogledaj opet toxijev primer, on jeste instancirao ArayList, ali nije posle rekao ar = broj;, nego ar.Add(broj);, znaci pozavo je metod Add(object) da doda element u listu i kompajler je njegov broj uboxovao u object tip da bi ga prosledio metodi Add. Sam ar je istao isti, referenca na instancu objekta ArrayList.



Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Jel ovo boxing/unboxing 16.09.2007. u 12:31 · pre 232 meseca #14
Citat:
When you box a value, you get an object upon which you can invoke methods, properties, and events.
For example, once you have converted the integer into an object, as shown in this code snippet, you
can call methods that are defined in System.Object, including ToString( ), Equals( ), and so forth.


Razumem svrhu konvertovanja ali...
u cemu je u ovom slucaju stos, kad ove metode koje se navode mogu da pozovem i bez konvertovanja u objekat?
Potpis
Mislim, šta reći !
Re: Jel ovo boxing/unboxing 17.09.2007. u 01:24 · pre 232 meseca #15
u C# i VB mozes jer oni rade boxing implicitno. u C++u moras da uradis explicitno.
Potpis
Goglasi! - Šta god da kupuješ, naći ćeš na Goglasima! Pretraga malih oglasa i eProdavnica, preko 10 milionda proizvoda.

Cityexpert.rs - Prva srpska onlajn agencija za nekretnine

ॐ

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme