JoranVerlaeckt
Nieuwe gebruiker
- Lid geworden
- 26 nov 2010
- Berichten
- 1
Beste Programmeurs,
Ik zit met iets dat ik niet goed begrijp, ik heb het boek gekocht "Programmeren met c#".
In dit boek wordt heel vaak verwezen naar de MSIL code en wordt deze ook geanalyseerd. In het boek stond dit voorbeeld om het verschil tussen structs en classes uit te leggen. Tot hier toe heb ik al van alles gezien over boxing en unboxing, en ik was mij er zekers van bewust dat in de functie PrintRGBValue die parameter rgb in de Console.WriteLine zou worden omgezet via boxing. Als je de MSIL bekijkt is het ook zo, dan staat er box .......
Maar nu dacht ik van wat gebeurd er nu als ik rgb verander naar rgb.ToString() welk duidelijk in het boek beschreven staat als "override string ToString()". Als ik deze wijziging toepas krijg ik een totaal andere MSIL code en is die boxing verdwenen.
Mijn vraag is nu : "Door dit te doen heb ik eigenlijk zelf de boxing uitgevoerd of wat is nu eigenlijk het fundamenteel verschil ?"
Groetjes
Joran
//Code voorbeeld
using System;
struct RGB
{
public static readonly RGB RED = new RGB(255, 0, 0);
public static readonly RGB GREEN = new RGB(0, 255, 0);
public static readonly RGB BLUE = new RGB(0, 0, 255);
public static readonly RGB WHITE = new RGB(255, 255, 255);
public static readonly RGB BLACK = new RGB(0, 0, 0);
public RGB(int Red, int Green, int Blue)
{
s_Red = Red;
s_Green = Green;
s_Blue = Blue;
}
public int s_Red;
public int s_Green;
public int s_Blue;
public override string ToString()
{
return s_Red.ToString("X") + s_Green.ToString("X") + s_Blue.ToString("X");
}
}
class StructApp
{
static void PrintRGBValue(string color, RGB rgb)
{
Console.WriteLine("The Value for {0} is {1}", color, rgb);
}
public static void Main()
{
PrintRGBValue("RED", RGB.RED);
PrintRGBValue("GREEN", RGB.GREEN);
PrintRGBValue("BLUE", RGB.BLUE);
PrintRGBValue("WHITE", RGB.WHITE);
PrintRGBValue("BLACK", RGB.BLACK);
Console.ReadLine();
}
}
Ik zit met iets dat ik niet goed begrijp, ik heb het boek gekocht "Programmeren met c#".
In dit boek wordt heel vaak verwezen naar de MSIL code en wordt deze ook geanalyseerd. In het boek stond dit voorbeeld om het verschil tussen structs en classes uit te leggen. Tot hier toe heb ik al van alles gezien over boxing en unboxing, en ik was mij er zekers van bewust dat in de functie PrintRGBValue die parameter rgb in de Console.WriteLine zou worden omgezet via boxing. Als je de MSIL bekijkt is het ook zo, dan staat er box .......
Maar nu dacht ik van wat gebeurd er nu als ik rgb verander naar rgb.ToString() welk duidelijk in het boek beschreven staat als "override string ToString()". Als ik deze wijziging toepas krijg ik een totaal andere MSIL code en is die boxing verdwenen.
Mijn vraag is nu : "Door dit te doen heb ik eigenlijk zelf de boxing uitgevoerd of wat is nu eigenlijk het fundamenteel verschil ?"
Groetjes
Joran
//Code voorbeeld
using System;
struct RGB
{
public static readonly RGB RED = new RGB(255, 0, 0);
public static readonly RGB GREEN = new RGB(0, 255, 0);
public static readonly RGB BLUE = new RGB(0, 0, 255);
public static readonly RGB WHITE = new RGB(255, 255, 255);
public static readonly RGB BLACK = new RGB(0, 0, 0);
public RGB(int Red, int Green, int Blue)
{
s_Red = Red;
s_Green = Green;
s_Blue = Blue;
}
public int s_Red;
public int s_Green;
public int s_Blue;
public override string ToString()
{
return s_Red.ToString("X") + s_Green.ToString("X") + s_Blue.ToString("X");
}
}
class StructApp
{
static void PrintRGBValue(string color, RGB rgb)
{
Console.WriteLine("The Value for {0} is {1}", color, rgb);
}
public static void Main()
{
PrintRGBValue("RED", RGB.RED);
PrintRGBValue("GREEN", RGB.GREEN);
PrintRGBValue("BLUE", RGB.BLUE);
PrintRGBValue("WHITE", RGB.WHITE);
PrintRGBValue("BLACK", RGB.BLACK);
Console.ReadLine();
}
}