Kezdőoldal » Számítástechnika » Programozás » C# nyelvben, hogyan lehet...

C# nyelvben, hogyan lehet megvalósítani egyetéen osztályban az operator++ prefix és postfix verzióját?

Figyelt kérdés

Nem tudom elérni,hogy egy osztályban mindkét verzió szerepeljen.

Itt a kód:

class MyInt {


public MyInt(int value): base()

{

this.Value = value;

}


private MyInt(MyInt rhs): this(rhs.Value)

{}


public int Value

{ get; private set; }


static public MyInt operator++(MyInt rhs)

{

++rhs.Value;

//Így prefix

return new MyInt(rhs);


/*Így pedig postfix

return new MyInt(rhs.Value-1);*/

}



}


internal class MainClass {

public static void Main()

{

MyInt x = new MyInt(10);

Console.WriteLine(x.Value); // 10

++x;

Console.WriteLine(x.Value); // 11

MyInt y = x++;

Console.WriteLine(x.Value); // 12

Console.WriteLine(y.Value); // 12 (!)

Console.ReadKey();

}

}


Hogyan csináljam meg?

A könyv ezt írja de bárhogy próbálom nem jó:

Nézzük az utolsó sort! Mivel y–nak a postfixes formában adtunk értéket, ezért 11–et kellene tartalmaznia, ehelyett x++ esetében pontosan ugyanaz történik, mint ha ++x-et írtunk volna.

A probléma, hogy kifejezetten postfixes operátort nem tudunk definiálni, az általunk készített kód minden esetben a prefix operátort jelenti. Viszont meghívhatjuk az általunk definiált operátorokat postfixes alakban, ekkor az adott objektumot eltárolja a rendszer, meghívja az értéket növelő kódrészletet, és visszadja az első lépésben félrerakott értéket. Ugye ez értéktípusok esetében tökéletesen működik, de referenciatípusoknál az első lépésben nem az értéket hanem a referenciát tároljuk, vagyis a késöbbi változás itt is érvényben lesz.

Ugyanakkor létezik módszer arra, hogy mégis megoldjuk a fenti problémát: az operátornak egy teljesen új objektumot kell visszaadnia, ekkor erre már nem mutat korábbi referencia, vagyis biztonságosan használható (viszont az új művelet (az objektum létreho


2014. febr. 8. 05:44
 1/4 A kérdező kommentje:

egyetéen- Ez egyetlen akar lenni.

Bocsi a hibák miatt.

2014. febr. 8. 05:46
 2/4 anonim ***** válasza:
2014. febr. 8. 12:18
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:

Nem értem.

Örülnék neki ha valaki venné a fáradtságot és leírná,hogyan kell mert nekem nem sikerül bárhogyan is csinálom.:-(

2014. febr. 8. 22:53
 4/4 A kérdező kommentje:
Nem sikerül segítsetek postfixes verziót írni pls. :-(
2014. febr. 9. 00:08

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!