using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using Microsoft.CSharp;
namespace tpcs
{
class MainClass
{
internal interface IChangeBoxedPoint
{
void Change(Int32 x, Int32 y);
}
internal struct Point: IChangeBoxedPoint
{
private Int32 m_x, m_y;
public Point(Int32 x, Int32 y)
{
this.m_x = x;
this.m_y = y;
}
public void Change(Int32 x, Int32 y)
{
this.m_x = x;
this.m_y = y;
}
public override string ToString()
{
return string.Format("({0}, {1})", this.m_x.ToString(), this.m_y.ToString());
}
}
public static void Main(string[] args)
{
Console.WriteLine("Point p = new Point(1, 1); ");
Point p = new Point(1, 1);
Console.WriteLine("p: {0}, o: {1}" , p, "------");
Console.WriteLine("p.Change(2, 2); ");
p.Change(2, 2);
Console.WriteLine("p: {0}, o: {1}" , p, "------");
Console.WriteLine("Object o = p; ");
Object o = p;
Console.WriteLine("p: {0}, o: {1}" , p, o);
Console.WriteLine("((Point)o).Change(3, 3); ");
((Point)o).Change(3, 3);
Console.WriteLine("p: {0}, o: {1}" , p, o);
Console.WriteLine("((IChangeBoxedPoint)p).Change(4, 4); ");
((IChangeBoxedPoint)p).Change(4, 4);
Console.WriteLine("p: {0}, o: {1}" , p, o);
Console.WriteLine("((IChangeBoxedPoint)o).Change(5, 5); ");
((IChangeBoxedPoint)o).Change(5, 5);
Console.WriteLine("p: {0}, o: {1}" , p, o);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXM7CnVzaW5nIFN5c3RlbS5UZXh0Owp1c2luZyBNaWNyb3NvZnQuQ1NoYXJwOwoKbmFtZXNwYWNlIHRwY3MKewpjbGFzcyBNYWluQ2xhc3MKewogICAgaW50ZXJuYWwgaW50ZXJmYWNlIElDaGFuZ2VCb3hlZFBvaW50CiAgICB7CiAgICAgICAgdm9pZCBDaGFuZ2UoSW50MzIgeCwgSW50MzIgeSk7CiAgICB9CiAgICBpbnRlcm5hbCBzdHJ1Y3QgUG9pbnQ6IElDaGFuZ2VCb3hlZFBvaW50CiAgICB7CiAgICAgICAgcHJpdmF0ZSBJbnQzMiBtX3gsIG1feTsKCiAgICAgICAgcHVibGljIFBvaW50KEludDMyIHgsIEludDMyIHkpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLm1feCA9IHg7CiAgICAgICAgICAgIHRoaXMubV95ID0geTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyB2b2lkIENoYW5nZShJbnQzMiB4LCBJbnQzMiB5KQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5tX3ggPSB4OwogICAgICAgICAgICB0aGlzLm1feSA9IHk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuRm9ybWF0KCIoezB9LCB7MX0pIiwgdGhpcy5tX3guVG9TdHJpbmcoKSwgdGhpcy5tX3kuVG9TdHJpbmcoKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlBvaW50IHAgPSBuZXcgUG9pbnQoMSwgMSk7ICIpOwogICAgICAgIFBvaW50IHAgPSBuZXcgUG9pbnQoMSwgMSk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInA6IHswfSwgbzogezF9IiAsIHAsICItLS0tLS0iKTsKCiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInAuQ2hhbmdlKDIsIDIpOyAiKTsKICAgICAgICBwLkNoYW5nZSgyLCAyKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgicDogezB9LCBvOiB7MX0iICwgcCwgIi0tLS0tLSIpOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiT2JqZWN0IG8gPSBwOyAiKTsKICAgICAgICBPYmplY3QgbyA9IHA7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInA6IHswfSwgbzogezF9IiAsIHAsIG8pOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiKChQb2ludClvKS5DaGFuZ2UoMywgMyk7ICIpOwogICAgICAgICgoUG9pbnQpbykuQ2hhbmdlKDMsIDMpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJwOiB7MH0sIG86IHsxfSIgLCBwLCBvKTsKCiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIigoSUNoYW5nZUJveGVkUG9pbnQpcCkuQ2hhbmdlKDQsIDQpOyAiKTsKICAgICAgICAoKElDaGFuZ2VCb3hlZFBvaW50KXApLkNoYW5nZSg0LCA0KTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgicDogezB9LCBvOiB7MX0iICwgcCwgbyk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIoKElDaGFuZ2VCb3hlZFBvaW50KW8pLkNoYW5nZSg1LCA1KTsgIik7CiAgICAgICAgKChJQ2hhbmdlQm94ZWRQb2ludClvKS5DaGFuZ2UoNSwgNSk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInA6IHswfSwgbzogezF9IiAsIHAsIG8pOwogICAgfQp9Cn0K
Point p = new Point(1, 1);
p: (1, 1), o: ------
p.Change(2, 2);
p: (2, 2), o: ------
Object o = p;
p: (2, 2), o: (2, 2)
((Point)o).Change(3, 3);
p: (2, 2), o: (2, 2)
((IChangeBoxedPoint)p).Change(4, 4);
p: (2, 2), o: (2, 2)
((IChangeBoxedPoint)o).Change(5, 5);
p: (2, 2), o: (5, 5)