C# 类型转换笔记

这短时间,从入手C#,到完成之前的几个WPF的项目,一直忙着完善各种需求上的事,趁这几天老板出差,整理下思路,话不多说,进入正题。

.Net的OOP模式下类型转换理论上为一下8种:

  1. 父 = new 父
  2. 子 = new 子
  3. 父 = new 子
  4. 子 = new 父
  5. 父 = (父)子
  6. 父 = (子)父
  7. 子 = (父)子
  8. 子 = (子)父

前四种是隐式转换,后四种是显示转换,比如其中1,2,3,5,8应该是我们常用到的方式,那么另外几种呢,其实仍然是可以使用的,在.net默认环境下,4就没法实现,但是我们可通过实现转换运算符重载来实现,代码如下:

class parent
    {
        public int age;
    }

    class son:parent
    {
        public int age;

        /*重载隐时转换的方式*/
        public static implicit operator son(parent p)
        {
            son s = new son();
            s.age = p.age;
            return s;
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            son s = new parent();   
        }
    }
  通过重载隐式转换符,可以看到,子 = new 父这种方式在隐式传入时,重新实例化了一个新的子类实例,然后通过浅度复制或者深度复制再返回这个子类实例,实际上到这里,仍然是返回了与子类引用对应的子类实例,但是这里在内存里面实际上存在一个引用,2个实例,这是子 = new 父,而子 = new 子这种形式就对应一个引用,一个实例。

之前一直以为上面8种方式有几种不成立,只是平时1,2,3,5,8这些是常用方式而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值