对象的引用可以被:

  • 隐式地向上转换

  • 显示的向下转换

向上转换

向上转换是指一个从一个基类指向一个子类:

House house = new House();
Asset asset = house;

House类是Asset的子类

这个时候隐式的向上转换就发生了

Asset类的一个对象asset指向了它的子类House 的对象house

Console.WriteLine(asset == house); // True

由于两个对象指向同一个类House所以他们是相等的。

对于asset来说访问到house的Name属性是非常简单的

但是就没法访问到Mortgage这个属性就没那么容易了,因为Mortgage中指存在了Name并不存在Mortgage这个属性

向下类型转换

向下类型转换是指一个子类的对象指向其基类

House h = new House();
Asset asset = h;
House house = (House)asset;
  • 父类比子类牛逼
  • 父类可以随意引用子类 向上转换
  • 但是子类引用父类需要显示转换 向下转换

向下转换需要显示说明,因为可能存在问题

Stock stock = new Stock();
Asset asset = stock;
House house = (House)asset;

编译时会报错,asset不是House类型所以无法强制转换为House类型

as运算符

as运算符在向下转换时尝试把基类的对象转换成子类的对象,若转换发生错误时,就会赋值null

Stock stock = new Stock();
Asset asset = stock;
House house = asset as House;
if (house != null)
{
Console.WriteLine(house.Mortgage);
}

输出为空,说明house的值为null

is运算符

is运算符用来检测引用的转换是否能够成功,换句话来说,就是检测一个对象是否从某个特定类派生。

        static void Main(string[] args)
{
House mfHouse = new House(){Name = "Nva"};
Asset asset = mfHouse;
if (asset is House)
{
Console.WriteLine(((House)asset).Name);
}
}

C#-类型转换和引用转换的更多相关文章

  1. 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换

    目录 02:数据类型转换 && 隐式转换 || 显式转换 02:数据类型转换 && 隐式转换 || 显式转换 在上一个章节中,我们介绍了 JavaScript 的基本的 ...

  2. JS的类型转换,强制转换和隐式转换

    JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123; var str1='123'; console.log(typeof s ...

  3. 05-数据类型转换(bool转换)

    05-数据类型转换(bool转换)

  4. JavaScript | 基础(变量/引用/转换/函数)

    ———————————————————————————————————————————— 变量 全局变量:在函数体外声明,全局可以使用 局部变量:通过关键字var来声明 变量类型 <script ...

  5. C#中的强制类型转换与as转换的区别

    C#中的强制类型转换 例如有ClassA与ClassB两个类创建两个类的对象进行转换 1 2 ClassA a = new ClassA();  ClassB b = new ClassB(); 如果 ...

  6. java子类数组的引用转换成超类数组的引用

    public class Person { } public class Student extends Person{ private String name; public Student(Str ...

  7. Number 强制类型转换 int 强制转换整型 float 强制转换浮点型 complex 强制转换成复数 bool 强制转换成布尔类型,结果只有两种,要么True 要么 False """bool 可以转换所有的数据类型 everything"""

    # ###Number 强制类型转换 var1 = 5 var2 = 4.85 var3 = True var3_2 = False var4 = 3+9j var5 = "888777&q ...

  8. javascript中的类型转换(进制转换|位运算)

    1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt(& ...

  9. Java数据类型转换(自动转换和强制转换)

    数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...

随机推荐

  1. netty权威指南学习笔记一——NIO入门(4)AIO

    NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现.异步通道提供以下两种方式获取操作结果. 1.通过java.util.concurrent.Future 类来表示异步操 ...

  2. MongoDB 副本集搭建

    搭建mongodb副本集 [root@ mongodb]# cd /u02 [root@ u02]# mkdir -p mongodb/data_2777 [root@ u02]# mkdir -p ...

  3. JPA#实体属性转换器

    __震惊,一下内容竟然是空白 用途 (自动转换数据库字段和实体属性间的最佳取值): - 1. POJO持久化到数据库表中的时候,对某些特殊属性处理后,用处理过的值作为数据库字段的值. 2. 从数据库查 ...

  4. 002、将mysql用作一个简单的计算器

    SELECT PI( ), , ( ) ; 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.

  5. Web前端开发CSS规范总结

    作为Web前端开发必备语言,CSS为大家广为熟知,今天就跟大家分享下CSS规范总结,Web前端的小伙伴们看过来吧! CSS样式的权值(权重) 权值等级的定义 第一等:代表内联样式,如: style=” ...

  6. spring boot配置druid连接池连接mysql

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  7. RDD转为Dataset如何指定schema?

    与RDD进行互操作 Spark SQL支持两种不同方法将现有RDD转换为Datasets.第一种方法使用反射来推断包含特定类型对象的RDD的schema.这种基于反射的方法会导致更简洁的代码,并且在编 ...

  8. windows2000 堆溢出 利用原理

    源于0day安全一书 1.堆的分配原理 申请堆空间   HANDLE address =  HeapCreate(0,0x1000,0x10000) address就是堆的地址 在address+0x ...

  9. 详解BurpSuite软件 请求包 HTTP (9.23 第十天)

    HTTP协议基础 HTTP:HyperText Transfer Protocol,超文本传输协议 1.协议特点: 简单快速,请求方式get post head等8中请求方式 无连接(一次请求就断开) ...

  10. 51nod 1103:N的倍数 抽屉原理

    1103 N的倍数 题目来源: Ural 1302 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个长度为N的数组A,从A中选出若干个数,使得这 ...