接口继承的值类型和引用类型

Posted on 2004-10-19 14:11  鲁旭  阅读(1140)  评论(3编辑  收藏  举报
在学习接口继承的时候发现书上有这么个例子,看了之后晕死了,是不是以后就不用值类型了呢?
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();

    }

}

Copyright © 2024 鲁旭
Powered by .NET 8.0 on Kubernetes