C#-类型转换和引用转换
对象的引用可以被:
隐式地向上转换
显示的向下转换
向上转换
向上转换是指一个从一个基类指向一个子类:
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#-类型转换和引用转换的更多相关文章
- 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换
目录 02:数据类型转换 && 隐式转换 || 显式转换 02:数据类型转换 && 隐式转换 || 显式转换 在上一个章节中,我们介绍了 JavaScript 的基本的 ...
- JS的类型转换,强制转换和隐式转换
JS的类型转换 1.强制转换 通过String(),Number(),Boolean()函数强制转换 var str=123; var str1='123'; console.log(typeof s ...
- 05-数据类型转换(bool转换)
05-数据类型转换(bool转换)
- JavaScript | 基础(变量/引用/转换/函数)
———————————————————————————————————————————— 变量 全局变量:在函数体外声明,全局可以使用 局部变量:通过关键字var来声明 变量类型 <script ...
- C#中的强制类型转换与as转换的区别
C#中的强制类型转换 例如有ClassA与ClassB两个类创建两个类的对象进行转换 1 2 ClassA a = new ClassA(); ClassB b = new ClassB(); 如果 ...
- java子类数组的引用转换成超类数组的引用
public class Person { } public class Student extends Person{ private String name; public Student(Str ...
- 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 ...
- javascript中的类型转换(进制转换|位运算)
1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt(& ...
- Java数据类型转换(自动转换和强制转换)
数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...
随机推荐
- 【ABP】从零开始学习ABP_入门介绍
本文介绍自己入坑ABP的过程,一些ABP的相关文章.QQ群,以及ABP Zero示例项目的运行. 背景 作为一个半路出家学习编程的新人,之前工作中也断断续续写过一些代码,但底层核心一直没机会学习,所以 ...
- 二十七、SAP中通过以字段的形式输出内容
一.输出时,需要加入关键词sy-vline,代码如下 二.效果如下
- Ubuntu 14.04 搭建 ftp
一.安装ftp服务器vsftpd $sudo apt-get update $sudo apt-get install vsftpd ftp服务器使用21端口,安装成功之后查看是否打开21端口 $ s ...
- 每天一点点之vue框架开发 - 使用vue-router路由
1.安装路由(安装过的跳过此步) // 进入项目根目录 cd frontend // 安装 npm install vue-router --save-dev 2.在入口文件main.js中引入路由 ...
- POJ 1004:Financial Management
Financial Management Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 165062 Accepted: ...
- sql拆分列 时间拆分 日、月、年
我想 查看今日访问人数 需要分组查询 就得 时间拆分 这两天百度 方法有很多 substring ... 但是 我这一列 是时间类型: 可以直接用 DATEPART() 函数用于返回日期/时间的单独部 ...
- 【LeetCode】两个数相加
[问题]给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. [实例] 输入: ...
- springboot整合mybatis与thymeleaf
1.创建springboot项目 (1)选择Spring Initializr (2)填写自己的Group 与 Artifact (3)选择依赖框架 等待maven下载好依赖和插件即可 2.主配置文件 ...
- Oracle 中多个字段显示成一列
SELECT COALESCE(A,B,C,'NA') FROM XXXXX --判断A若为空则取B,B为空这取C,C为空则取默认值'NA'
- select * 和select 1 以及 select count(*) 和select count(1)的区别
select 1 和select * select * from 表:查询出表中所有数据,性能比较差: select 常量 from 表:查询出结果是所有记录数的常量,性能比较高: selelct 常 ...