(转载)接口继承的值类型和引用类型-之装箱

本文通过C#示例代码展示了值类型如何实现接口,并探讨了值类型与引用类型在使用接口时的行为差异,特别是装箱与拆箱过程中的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    #region IChangeBoxedPoint 成员

    public void Change(Int32 x, Int32 y)
    {
        // TODO:  添加 CPoint.Change 实现
        this.x=x;
        this.y=y;
    }

    #endregion
    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();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值