d2jsp
Log InRegister
d2jsp Forums > Off-Topic > International > Magyar > Mekprogramozzuk Topic
Prev15657585960249Next
Add Reply New Topic New Poll
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Jun 26 2014 08:51am
Quote (fahrii @ 26 Jun 2014 15:39)
Köszi, a tanár jegyzetében kb említés szintjén ezekről szó.
Esetleg a 5ös feladat?


erre az "out" jó

Code
class Number5
{
public void Stuff(out string output)
{
// erre a WriteLine-os sorra hibát kapsz: "Error 2 Use of unassigned out parameter 'output'"
// tehát az out alapból leszarja hogy volt-e bemenő értéke, és úgy gondolja hogy nem volt
//Console.WriteLine("writeLine #2: " + output);
output = "hello";
}
}

class Program
{
static void Main(string[] args)
{
var output = "valami";

Console.WriteLine("writeLine #1: " + output);
var cucc = new Number5();
cucc.Stuff(out output);
Console.WriteLine("writeLine #3: " + output);

Console.ReadKey();
}
}


ref-el lehet bevinni is adatot:

Code
class Number5
{
public void Stuff(ref string output)
{
Console.WriteLine("writeLine #2: " + output);
output = "hello";
}
}

class Program
{
static void Main(string[] args)
{
var output = "valami";

Console.WriteLine("writeLine #1: " + output);
var cucc = new Number5();
cucc.Stuff(ref output);
Console.WriteLine("writeLine #3: " + output);

Console.ReadKey();
}
}


van pár más különbség is ref és out között de az most mind1 (főként az hogy ref-et inicializálni kell mielőtt használod, ahogy most mindkét esetben írtam is a var output = "valami"-t .. az az elsőnél elhagyható (sőt, nem is kell oda, csak a példa így volt szemléletes)

This post was edited by Anarkin on Jun 26 2014 09:02am
Member
Posts: 29,404
Joined: Jan 24 2009
Gold: 0.00
Jun 26 2014 10:05am
A 6osban mi az h beállítja véletlenszerűen? Megvan a statikus adattag, illetve konstruktor, de mit írjak a konstruktorba?
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Jun 26 2014 10:13am
Quote (fahrii @ 26 Jun 2014 17:05)
A 6osban mi az h beállítja véletlenszerűen? Megvan a statikus adattag, illetve konstruktor, de mit írjak a konstruktorba?


readonly kell, nem static (az csak a véletlen, hogy épp azt is használom, másra

Code
class Number6
{
static Random random = new Random();

public readonly string Tag;

public Number6(string tag) // ctor #1
{
Tag = tag;
}
public Number6() // ctor #2
{
Tag = random.Next(128).ToString();
}

public void SetTag(string value)
{
// bárhol máshol, error : A readonly field cannot be assigned to (except in a constructor or a variable initializer)

//Tag = value;
}
}

class Program
{
static void Main(string[] args)
{
var instanceA = new Number6("some value");
Console.WriteLine(string.Format("Tag of instanceA: {0}", instanceA.Tag));

for (var i = 0; i < 10; i++)
{
var instance = new Number6(); // másik ctor-t használja

Console.WriteLine(string.Format("Tag of instance{0}: {1}", i, instance.Tag));
}

Console.ReadKey();
}
}



Code
Tag of instanceA: some value
Tag of instance0: 106
Tag of instance1: 63
Tag of instance2: 55
Tag of instance3: 118
Tag of instance4: 110
Tag of instance5: 125
Tag of instance6: 5
Tag of instance7: 83
Tag of instance8: 50
Tag of instance9: 2


This post was edited by Anarkin on Jun 26 2014 10:14am
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Jun 26 2014 10:20am
Random classt miért így használtam?

tudjuk hogy a Random az a környezetből (.NET / szgép) ill. környezet alapján vesz egy számot

de ha azt csináltam volna hogy

Code
public Number6() // ctor #2
{
Tag = new Random().Next(128).ToString();
}


akkor a 10-es (meg akár 100000-es) ciklus kb 0.0000001 mp alatt lefut, és mindegyikre ugyan azt a számot dobja ki, mert mindig új Random instance keletkezik és nincs tisztában azzal hogy már kiköpte az éppen aktuálisan "kiköpendő" számot egyszer

This post was edited by Anarkin on Jun 26 2014 10:21am
Member
Posts: 29,404
Joined: Jan 24 2009
Gold: 0.00
Jun 26 2014 10:30am
Quote (Anarkin @ 26 Jun 2014 17:13)
readonly kell, nem static (az csak a véletlen, hogy épp azt is használom, másra

Code
class Number6
    {
        static Random random = new Random();

        public readonly string Tag;

        public Number6(string tag) // ctor #1
        {
            Tag = tag;
        }
        public Number6() // ctor #2
        {
            Tag = random.Next(128).ToString();
        }

        public void SetTag(string value)
        {
            // bárhol máshol, error : A readonly field cannot be assigned to (except in a constructor or a variable initializer)

            //Tag = value;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var instanceA = new Number6("some value");
            Console.WriteLine(string.Format("Tag of instanceA: {0}", instanceA.Tag));

            for (var i = 0; i < 10; i++)
            {
                var instance = new Number6(); // másik ctor-t használja

                Console.WriteLine(string.Format("Tag of instance{0}: {1}", i, instance.Tag));
            }

            Console.ReadKey();
        }
    }



Code
Tag of instanceA: some value
Tag of instance0: 106
Tag of instance1: 63
Tag of instance2: 55
Tag of instance3: 118
Tag of instance4: 110
Tag of instance5: 125
Tag of instance6: 5
Tag of instance7: 83
Tag of instance8: 50
Tag of instance9: 2


most nemvágom a különbséget static és readonly között
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Jun 26 2014 10:41am
Quote (fahrii @ 26 Jun 2014 17:30)
most nemvágom a különbséget static és readonly között


ez egy szomorú kijelentés xD

readonly:
sima instance változó marad a field, de csak a constructorban állíthatod be az értékét (vagy egyből ahol definiálod)

static:
nem is tudom hogy fejtsem ki, annyira alap... itt a kettes feladat, ez a megoldása:

Code
class Number2
{
public static int Szamol(int a, int b)
{
return a + b;
}
}

static void Main(string[] args)
{
var number2 = Number2.Szamol(5, 6);
Console.WriteLine("number2: " + number2);

Console.ReadKey();
}


amikor .NET meglát egy osztályt a .dll-ekben, akkor készít belőlük egyetlen statikus verziót, kivétel nélkül

amikor normálisan (/ jellemzően) használni akarsz egy osztályt, akkor ezt példányosítod (~instance)

ha valami static, akkor úgy hivatkozol rá, hogy
Number2.Szamol()

ha ez nem lenne statikus, akkor csinálnál a Number2-ből egy instance-t és azt használnád
Number2 instance1 = new Number2();
instance1.NemStatikusSzamolas(...);

bővítsük ki Number2-t hogy eltérjünk a feladattól, megmarad a statikus része, de csinálunk normálisat is:

(Number3 kódját ne nézd xd)



Code
number2: 11
number2: 13



--
egy sorban:

static tagokat elérheted példányosítás nélkül is

This post was edited by Anarkin on Jun 26 2014 10:44am
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Jun 26 2014 10:53am
legalapabb példa ahol staticot használhatsz pl

űrhajó osztály belülről magának oszt ID-t a példányosítás során, így nem kell baszakodni kívülről
ha megszűnik pár űrhajó és jönnek újak, akkor is mindig garantált h egyedit kapnak



0
1
2
3
4
5
6
7
8
9
Next ID will be: 10

non-static függvény hozzáfér a static tagokhoz (mivel abból 1 db van ha úgy vesszük)
static függvény nem fér hozzá a non-static tagokhoz (mivel nem tudja hogy az ezer-millió instance közül melyikhez kell, semmi értelme nem lenne)

This post was edited by Anarkin on Jun 26 2014 10:54am
Member
Posts: 20,826
Joined: Feb 8 2012
Gold: 1,630.69
Jun 26 2014 11:04am
Quote (Anarkin @ Jun 26 2014 05:53pm)
legalapabb példa ahol staticot használhatsz pl

űrhajó osztály belülről magának oszt ID-t a példányosítás során, így nem kell baszakodni kívülről
ha megszűnik pár űrhajó és jönnek újak, akkor is mindig garantált h egyedit kapnak

http://i.imgur.com/C7LP7Yx.png

0
1
2
3
4
5
6
7
8
9
Next ID will be: 10

non-static függvény hozzáfér a static tagokhoz (mivel abból 1 db van ha úgy vesszük)
static függvény nem fér hozzá a non-static tagokhoz (mivel nem tudja hogy az ezer-millió instance közül melyikhez kell, semmi értelme nem lenne)


Ezt hogy x references melyik plugin irja ki?
Member
Posts: 53,925
Joined: Apr 15 2007
Gold: 11,500.00
Trader: Trusted
Jun 26 2014 11:08am
Quote (Karan2_Returned @ 26 Jun 2014 18:04)
Ezt hogy x references melyik plugin irja ki?


VS2013 Ultimate-ben van csak benne asszem, CodeLens

Member
Posts: 29,404
Joined: Jan 24 2009
Gold: 0.00
Jun 26 2014 11:14am
Quote (Anarkin @ 26 Jun 2014 17:41)
ez egy szomorú kijelentés xD

readonly:
sima instance változó marad a field, de csak a constructorban állíthatod be az értékét (vagy egyből ahol definiálod)

static:
nem is tudom hogy fejtsem ki, annyira alap... itt a kettes feladat, ez a megoldása:

Code
class Number2
        {
            public static int Szamol(int a, int b)
            {
                return a + b;
            }
        }

        static void Main(string[] args)
        {
            var number2 = Number2.Szamol(5, 6);
            Console.WriteLine("number2: " + number2);

            Console.ReadKey();
        }


amikor .NET meglát egy osztályt a .dll-ekben, akkor készít belőlük egyetlen statikus verziót, kivétel nélkül

amikor normálisan (/ jellemzően) használni akarsz egy osztályt, akkor ezt példányosítod (~instance)

ha valami static, akkor úgy hivatkozol rá, hogy
Number2.Szamol()

ha ez nem lenne statikus, akkor csinálnál a Number2-ből egy instance-t és azt használnád
Number2 instance1 = new Number2();
instance1.NemStatikusSzamolas(...);

bővítsük ki Number2-t hogy eltérjünk a feladattól, megmarad a statikus része, de csinálunk normálisat is:

(Number3 kódját ne nézd xd)

http://i.imgur.com/6QowOx0.png

Code
number2: 11
number2: 13



--
egy sorban:

static tagokat elérheted példányosítás nélkül is


Visz
Quote (Anarkin @ 26 Jun 2014 17:41)
ez egy szomorú kijelentés xD

readonly:
sima instance változó marad a field, de csak a constructorban állíthatod be az értékét (vagy egyből ahol definiálod)

static:
nem is tudom hogy fejtsem ki, annyira alap... itt a kettes feladat, ez a megoldása:

Code
class Number2
        {
            public static int Szamol(int a, int b)
            {
                return a + b;
            }
        }

        static void Main(string[] args)
        {
            var number2 = Number2.Szamol(5, 6);
            Console.WriteLine("number2: " + number2);

            Console.ReadKey();
        }


amikor .NET meglát egy osztályt a .dll-ekben, akkor készít belőlük egyetlen statikus verziót, kivétel nélkül

amikor normálisan (/ jellemzően) használni akarsz egy osztályt, akkor ezt példányosítod (~instance)

ha valami static, akkor úgy hivatkozol rá, hogy
Number2.Szamol()

ha ez nem lenne statikus, akkor csinálnál a Number2-ből egy instance-t és azt használnád
Number2 instance1 = new Number2();
instance1.NemStatikusSzamolas(...);

bővítsük ki Number2-t hogy eltérjünk a feladattól, megmarad a statikus része, de csinálunk normálisat is:

(Number3 kódját ne nézd xd)

http://i.imgur.com/6QowOx0.png

Code
number2: 11
number2: 13



--
egy sorban:

static tagokat elérheted példányosítás nélkül is


Jólvan, közbe leesett hogy hülye vagyok. Bocsi, ennyire nem vagyok hülye hozzá, csak bekavart a readonly :blush: . De így már tiszta, ty!
Go Back To Magyar Topic List
Prev15657585960249Next
Add Reply New Topic New Poll