C#中子类与父类的相互转换

来源:互联网 发布:子域名查询 编辑:程序博客网 时间:2024/05/10 16:52
1.父类不能直接强制转换成子类

2.子类可以强制转换成父类,但是在父类中只能取父类的字段与方法

    因此在一个父类对应多个子类的时候,不知道具体是哪个子类的时候,就可以先声明一个父类的类型。(如例1)

3.由1,2知,父类不能直接强制转换成子类,但是可以通过间接的方法进行转换,例1中有所体现:将子类装箱成父类,然后再把父类拆箱成子类,如例2。

    特别说明:虽然可以通过间接方式将父类转成子类,但实际用处不大,因为需要一个临时的子类来进行转换,因为其实可以直接在子类直接转换,所以

     实际用处不大。

例1:

using System;using System.Collections.Generic;using System.Linq;using System.Text;//markton 130809namespace testApplication{    class Program    {        static void Main(string[] args)        {            //不知道具体是哪个子类,因此先用父类来声明            List<CParent> sL = new List<CParent>();            CSon cs1 = new CSon(); cs1.b = -1;            CSon cs2 = new CSon(); cs2.b = -2;            sL.Add(cs1);  //子类可以强制转换成父类,即装箱            sL.Add(cs2);            for (int i = 0; i < 2;i++ )            {                //这里需要把父类再强制转换成子类(因为是装箱而来的父类,可以对其进行拆箱成子类)                //取出子类中的字段,即拆箱                Console.WriteLine(((CSon)sL[i]).b);            }            Console.ReadLine();        }    }    public class CParent    {        public int a=0;    }    public class CSon:CParent    {        public int b=0;        public int run()        {            return a + b;        }    }    public class CSon2 : CParent    {        public string c = "CSon2";        public int run()        {            return a;        }    }}
例2:
using System;using System.Collections.Generic;using System.Linq;using System.Text;//markton 130809namespace testApplication{    class Program    {        static void Main(string[] args)        {            CParent Cpa = new CParent();            Cpa.a=9;            //设置一个临时的子类            CSon tmpt = new CSon();            tmpt.a = 9;            //进行装箱            Cpa = (CParent)tmpt;            //进行拆箱            CSon cson = (CSon)Cpa;            Console.WriteLine(cson.a);            Console.ReadLine();        }    }    public class CParent    {        public int a=0;    }    public class CSon:CParent    {        public int b=0;        public int run()        {            return a + b;        }    }    public class CSon2 : CParent    {        public string c = "CSon2";        public int run()        {            return a;        }    }}



原创粉丝点击