在学习接口继承的时候发现书上有这么个例子,看了之后晕死了,是不是以后就不用值类型了呢?
using System;
![]()
//定义Change 方法的接口
interface IChangeBoxedPoint
{
void Change(Int32 x,Int32 y);
}
![]()
//让Point值类型实现IChangeBoxedPoint接口
struct Point:IChangeBoxedPoint
{
public Int32 x,y;
public void Change(Int32 x,Int32 y)
{
this.x=x;
this.y=y;
}
![]()
public override String ToString()
{
return String.Format("({0},{1})",x,y);
}
}
class CPoint:IChangeBoxedPoint
{
public Int32 x,y;
IChangeBoxedPoint 成员
public override String ToString()
{
return String.Format("({0},{1})",x,y);
}
}
![]()
![]()
class App
{
static void Main()
{
Point p=new Point();
p.x=p.y=1;
Console.WriteLine(p);//显示(1,1)
![]()
p.Change(2,2);
Console.WriteLine(p);//显示(2,2)
![]()
Object o=p;
Console.WriteLine(o);//显示(2,2)
![]()
((Point)o).Change(3,3);
Console.WriteLine(o);//显示(2,2)
![]()
//对p执行装箱,然后改变已装箱对象,最后将之丢弃
((IChangeBoxedPoint)p).Change(4,4);
Console.WriteLine(p);//显示(2,2)
![]()
//改变已装箱对象,并显示其内容
((IChangeBoxedPoint)o).Change(5,5);
Console.WriteLine(o);//显示(5,5)
![]()
CPoint cp=new CPoint();
cp.x=cp.y=1;
Console.WriteLine(cp);//显示(1,1)
![]()
cp.Change(2,2);
Console.WriteLine(cp);//显示(2,2)
![]()
Object co=cp;
Console.WriteLine(co);//显示(2,2)
![]()
((CPoint)co).Change(3,3);
Console.WriteLine(co);//显示(3,3)
![]()
//对p执行装箱,然后改变已装箱对象,最后将之丢弃
((IChangeBoxedPoint)cp).Change(4,4);
Console.WriteLine(cp);//显示(4,4)
![]()
//改变已装箱对象,并显示其内容
((IChangeBoxedPoint)co).Change(5,5);
Console.WriteLine(co);//显示(5,5)
![]()
Console.ReadLine();
![]()
}
}
using System;
//定义Change 方法的接口
interface IChangeBoxedPoint
{
void Change(Int32 x,Int32 y);
}
//让Point值类型实现IChangeBoxedPoint接口
struct Point:IChangeBoxedPoint
{
public Int32 x,y;
public void Change(Int32 x,Int32 y)
{
this.x=x;
this.y=y;
}
public override String ToString()
{
return String.Format("({0},{1})",x,y);
}
}
class CPoint:IChangeBoxedPoint
{
public Int32 x,y;
IChangeBoxedPoint 成员
public override String ToString()
{
return String.Format("({0},{1})",x,y);
}
}

class App
{
static void Main()
{
Point p=new Point();
p.x=p.y=1;
Console.WriteLine(p);//显示(1,1)
p.Change(2,2);
Console.WriteLine(p);//显示(2,2)
Object o=p;
Console.WriteLine(o);//显示(2,2)
((Point)o).Change(3,3);
Console.WriteLine(o);//显示(2,2)
//对p执行装箱,然后改变已装箱对象,最后将之丢弃
((IChangeBoxedPoint)p).Change(4,4);
Console.WriteLine(p);//显示(2,2)
//改变已装箱对象,并显示其内容
((IChangeBoxedPoint)o).Change(5,5);
Console.WriteLine(o);//显示(5,5)
CPoint cp=new CPoint();
cp.x=cp.y=1;
Console.WriteLine(cp);//显示(1,1)
cp.Change(2,2);
Console.WriteLine(cp);//显示(2,2)
Object co=cp;
Console.WriteLine(co);//显示(2,2)
((CPoint)co).Change(3,3);
Console.WriteLine(co);//显示(3,3)
//对p执行装箱,然后改变已装箱对象,最后将之丢弃
((IChangeBoxedPoint)cp).Change(4,4);
Console.WriteLine(cp);//显示(4,4)
//改变已装箱对象,并显示其内容
((IChangeBoxedPoint)co).Change(5,5);
Console.WriteLine(co);//显示(5,5)
Console.ReadLine();
}
}


浙公网安备 33010602011771号