Csharp/CSharp Tutorial/struct/Box Unbox
Box and unbox a struct
<source lang="csharp">using System; struct EMPLOYEE {
public string name; public short deptID; public EMPLOYEE(string n, short d) { name = n; deptID = d; }
} class MainClass {
public static void Main(string[] args) { EMPLOYEE fred = new EMPLOYEE("s",1); fred.name = "F"; object stanInBox = fred; UnboxThisEmployee(stanInBox); } public static void UnboxThisEmployee(object o) { EMPLOYEE temp = (EMPLOYEE)o; Console.WriteLine(temp.name); }
}</source>
F
Box a struct, change its value and unbox it
<source lang="csharp">public interface IModifyMyStruct {
int X { get; set; }
} public struct MyStruct : IModifyMyStruct {
public int x; public int X { get { return x; } set { x = value; } } public override string ToString() { return x.ToString(); }
} public class MainClass {
static void Main() { MyStruct myval = new MyStruct(); myval.x = 123; object obj = myval; System.Console.WriteLine( "{0}", obj.ToString() ); IModifyMyStruct iface = (IModifyMyStruct) obj; iface.X = 456; System.Console.WriteLine( "{0}", obj.ToString() ); MyStruct newval = (MyStruct) obj; System.Console.WriteLine( "{0}", newval.ToString() ); }
}</source>
123 456 456
Box struct to call its implemented interface
<source lang="csharp">public interface IDisplay {
void Print();
} public struct MyStruct : IDisplay {
public int x; public void Print() { System.Console.WriteLine( "{0}", x ); }
} public class MainClass {
static void Main() { MyStruct myval = new MyStruct(); myval.x = 123; // no boxing myval.Print(); // must box the value IDisplay printer = myval; printer.Print(); }
}</source>
123 123