1.父类不能直接强制转换成子类

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

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

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

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

实际用处不大。

例1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//markton 130809
namespace 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 130809
namespace 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;
}
}
}

C#中子类与父类的相互转换的更多相关文章

  1. C#中子类调用父类的实现方法

    这篇文章主要介绍了C#中子类调用父类的实现方法,通过实例逐步分析了类中初始化构造函数的执行顺序问题,有助于加深对C#面向对象程序设计的理解,需要的朋友可以参考下     本文实例讲述了C#中实现子类调 ...

  2. java中子类继承父类程序执行顺序

    java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...

  3. 关于JAVA中子类和父类的构造方法

    本篇文章总结了一些关于Java构造方法的常见问题. 为什么创建了一个子类对象会调用其父类的构造方法 如下代码示例: package simplejava; class Super { String s ...

  4. java中子类与父类中隐含的this引用的分析

    /* 看一下下面的程序,看是否你的答案和运行的答案是否一致! */ class Parent{ public int x; public Parent p; public Parent(){} pub ...

  5. java中子类继承父类程序执行顺序问题

    Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证.比如新建一个测试父类. public ...

  6. JavaScript中子类调用父类方法的实现

    一.前言 最近在项目中,前端框架使用JavaScript面向对象编程,遇到了诸多问题,其中最典型的问题就是子类调用父类(super class)同名方法,也就是如C#中子类中调用父类函数base.** ...

  7. Java中子类和父类相关方法的执行顺序

    无意中看到下面一个题目,大家一起来看看最后的输出结果是什么.反正我看完之后,用IDE测试后感觉知识点得到巩固了. /** * 函数执行顺序测试 * Created by 萌小Q on 2017/5/1 ...

  8. Java中子类覆盖父类方法所必须满足的条件

    因为太喜欢,所以转来,侵删! 参考自:http://www.it165.net/pro/html/201504/39284.html 一.描述 子类重写(覆盖)父类的方法必须满足的条件:1.父类中的方 ...

  9. [转]Java中子类调用父类构造方法的问题分析

    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下:    当你new一个子类对象的时候,必须首先要new一个 ...

随机推荐

  1. curl_setopt用此函数设置上传文件请求的兼容性调整

    在用curl_setopt($curl, CURLOPT_POSTFIELDS, $fileData);这个函数设置时会报错如下 curl_setopt(): The usage of the @fi ...

  2. SQL问题集锦

    1.union和union all的区别:http://www.cnblogs.com/xiangshu/articles/2054447.html

  3. file_get_contents高級用法

    首先解決file_get_contents的超時問題,在超時返回錯誤後就象js中的settimeout那樣進行一次嘗試,錯誤超過3次或者5次後就確認為無法連線伺服器而徹底放棄.這裡就簡單介紹兩種解決方 ...

  4. XMPP系列2:如何掌握XMPP协议

    michaely 回答于 2012-08-07 08:34 举报我要说的是:1.任何一个协议想学习并熟练掌握,都不是一天两天的事情.2.XMPP协议现在已经有很多成熟的架构和客户端,无需重新造轮子.3 ...

  5. HDU 5914 Triangle 数学找规律

    Triangle 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Description Mr. Frog has n sticks, who ...

  6. Django 源码小剖: 响应数据 response 的返回

    响应数据的返回 在 WSGIHandler.__call__(self, environ, start_response) 方法调用了 WSGIHandler.get_response() 方法, 由 ...

  7. 写给已有编程经验的 Python 初学者的总结【转】

    当我开始学习Python的时候,有些事我希望我一早就知道.我花费了很多时间才学会这些东西.我想要把这些重点都编纂到一篇文章当中.这篇文章的目标读者,是刚刚开始学习Python语言的有经验的程序员,想要 ...

  8. SQLSERVER建立MYSQL连接服务器

    1. 在SQL SERVER端安装MYSQL的ODBC驱动 2. 在ODBC数据源添加MYSQL(控制面板\所有控制面板项\管理工具) 在用户DSN 和系统DSN添加配置驱动程序 注:字符集一定要和M ...

  9. Spring AOP Schema aop:config、tx:advice

    Spring AOP Schema  aop:config.tx:advice 一.      利用aop:config标签实现AOP 首先看个例子,如下 接口代码: package com.lei. ...

  10. IT Operations(IT 运营),运维的更价值化认识

    一直想努力向别人(甚至包括从事运维的人)解释清楚什么是运维,发现很难! 6月20号,在InfoQ高效运维群里面,对运维创业做了一次激烈的讨论,很自然地,过程中不可避免的谈到运维苦逼和运维无法产品化的问 ...