C#学习笔记四(转换2)

C#学习笔记四(转换1)_Zenki--的博客-CSDN博客

引用转换:引用类型对象由内存中的引用和数据组成。

(1)引用类型间的转换会把引用“标记”为其他类型。

(2)目标类型作为父类不会看到源类型子类的扩展部分。

    class A { public int Field1; }
    class B:A { public int Field2; }

    static void Main(string[] args)
    {
        B myVar1 = new B();
        A myVar2 = (A)myVar1;


        Console.WriteLine($"{myVar1.Field1}");//正确
        Console.WriteLine($"{myVar1.Field2}");//正确
        Console.WriteLine($"{myVar2.Field1}");//正确
        Console.WriteLine($"{myVar2.Field2}");//编译错误
    }

**对于myVar1,引用的对象是B类型。

**对于myVar2,实际指向B类型对象,但看不到B扩展A的部分。

隐式引用转换:

(1)所有引用类型可以被隐式转换为object类型。

(2)任何接口可以隐式地转换为它继承的接口。

(3)类可以隐式地转换为:

**它继承链中的任何类

**它实现的任何接口

显示引用转换:

(1)从object到任何引用类型的转换。

(2)从基类到派生自它的类的转换。

**有效的显示转换有三种情况:

(1)显示转换是没必要的,也就是从派生类到基类的转换。

class A { public int Field1; }
class B:A { public int Field2; }

B myVar1 = new B();
A myVar2 = (A)myVar1;//不必转换,因为从A是B的基类

(2)源引用是null。

class A { public int Field1; }
class B:A { public int Field2; }

A myVar1 = null;
B myVar2 = (B)myVar1;//允许转换,因为myVar1为null

(3)由源引用指向的实际数据可以安全地进行隐式转换。

class A { public int Field1; }
class B:A { public int Field2; }

B myVar1 = new B();
A myVar2 = myVar1;//对应第一种情况,将myVar1隐式地转换为A类型,实际数据为B
B myVar3 = (B)myVar2;//允许转换,因为数据是B类型

装箱和拆箱:C#学习笔记二(装箱Boxing和拆箱Unboxing)_Zenki--的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值