C# struct 装箱拆箱例子

值类型:拆箱、装箱
struct是值类型

struct和class的区别
  1. 类是引用类型,struct是值类型
  2. 在托管堆上创建类的实例,在栈上创建struct实例
  3. 类实例的赋值,赋的是引用地址,struct实例的赋值,赋的是值
  4. 类作为参数类型传递,传递的是引用地址,struct作为参数类型传递,传递的是值
  5. 类没有默认无参构造函数,struct有默认无参构造函数
  6. 类支持继承,struct不支持继承
  7. 类偏向于”面向对象”,用于复杂、大型数据,struct偏向于”简单值”,比如小于16字节,结构简单
  8. 类的成员很容易赋初值,很难给struct类型成员赋初值
  9. 类的实例只能通过new SomeClass()来创建,struct类型的实例既可以通过new SomeStruct()来创建,也可以通过SomeStruct myStruct;来创建
// 调用方法
private void Form1_Load(object sender, EventArgs e)
{
    Dog dog = new Dog(5);
    object objDog = dog;
    Log.v("5\t" + dog.Power + "/" + ((Dog)objDog).Power);

    // Unbox, modify unboxed value, and discard value
    ((Dog)objDog).SetPower(100);
    Log.v("100\t" + dog.Power + "/" + ((Dog)objDog).Power + " - " + ((Dog)objDog).Power);

    // Box, modify boxed value, and discard reference to box
    ((IAttack)dog).SetPower(26);
    Log.v("26\t" + dog.Power + "/" + ((Dog)objDog).Power + " - " + ((Dog)dog).Power);

    // Modify boxed value directly
    ((IAttack)objDog).SetPower(58);
    Log.v("58\t" + dog.Power + "/" + ((Dog)objDog).Power + " - " + ((Dog)objDog).Power);
}
// 需要的类和接口
// Dog 类
public struct Dog : IAttack
{
    public int Power { get; set; }
    public Dog(int power)
    {
        SetPower(power);
    }
    public void SetPower(int power)
    {
        Power = power;
    }
}
// 攻击接口
public interface IAttack
{
    void SetPower(int power);
}

输出结果:

12-29 09:33:46.579   v   5      5/5
12-29 09:33:46.582   v   100    5/5 - 5
12-29 09:33:46.583   v   26     5/5 - 5
12-29 09:33:46.583   v   58     5/58 - 58
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于大大大洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值