【C#】类——里式转换
类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据类型就是数组和结构体了,数组存放相同数据类型的数据,结构体存放不同数据类型的数据!
值类型和引用类型是数据类型的分类:就想调用分为传值调用和传址调用
值类型:在栈中不同区域直接存储数据,通过复制对象赋值;赋值后重新改动时不会影响被复制对象的值
引用类型:数据存存在堆中,通过栈中的地址指向堆,通过复制对象赋值后,新变量指向被复制对象的地址,,重新改动时会影响被复制的值。
值类型数据:传递拷贝:值
引用类型数据:传递引用:地址
int a = null;//值类型不可能包含null值,不赋值会默认0,引用类型默认NULL
值类型均有一个隐式的默认构造函数来初始化该类型的默认值,所以使用时不用new,直接赋值就可以了
值类型不可存在新的子类,所有的值类型均隐式派生于system.ValueType
结构体数据值类型,类属于引用类型
结构体和类的区别
结构中默认有一个无参的构造函数
在结构中写一个有参的构造函数的话,要把这个构造函数的所有字段都赋值, 无参的构造函数不会因为有参的构造函数存在而消失
类中默认有一个无参的构造函数
在类中写一个有参构造函数的话, 类中构造函数参数列表中参数可以不确定,默认构造函数会消失
详细的区别:https://www.cnblogs.com/highven/p/3191775.html
子类继承父类(父类就是基类,子类就是派生类,所有类的基类为object)
子类继承了父类的属性和方法,但子类也具有专属自己的属性和方法
构造函数的出现,使得在实例化一个类后可以方便灵活的给对象赋值
继承的出现,使得子类在实例化一个类时通过调用父类的属性方法,删除了子类的属性方法的冗余代码
继承出现后,也方便灵活实例化一个类:
子类通过带参的构造函数实例化对象时,这时默认调用的是父类默认无参的构造函数
想要调用父类有参的构造函数:base
调用父类无参的构造函数和调用父类有参的构造函数的区别?
:实质上没什么区别,子类全部通过调用父类无参的构造函数也可以,这不过这时候走的父类默认的构造函数而已,没多大区别!
但是如果父类中对字段进行保护,子类没有办法拿到父类的属性在自己的构造方法中使用,这时候子类就只能使用自己的有参的构造函数通过调用父类的有参构造函数初始化
1.因为属性保护字段,所以父类中取消set
2.而子类继承父类,想通过父类的字段给对象赋值
3.但此时拿不到父类中字段的属性
4.只能通过调用父类有参的构造函数来
5.这样子类的对象才能初始化成功
所以,当属性的set无法使用,用无参构造方法不能成功实例化对象的,这时候只能调用父类有参的构造参数。
调用时:子类与父类的构造函数中参数顺序要一致
public 公共的
private 私有的,只能在本类中用
protected 不允许其他非子类访问,父类修饰,子类可以访问到
关于里式转换:其实是隐式转换,判断能不能转换,不能隐式转,那就强制转,但强制可能会出错!
1.【异常】父类不能直接转换为子类
Person p=new Person();//实例化一个Person类,用Person类变量p接收
*Student stu=(Student) p;//强制将Person类对象p转换为Student类后,赋值给一个Student类对象Stu
【解释】:要把父类转为子类,不可以,子类专属的属性方法父类是没有的,所以转换会报异常
2.【正常】如果new的是子类,父类再转换子类的时候可以转
*Person p=new Student();//实例化一个Student类,用Person类变量p接收,这里在隐式转换,想把子类转换为父类
Student stu=(Student) p;//强制将Student类对象p转换为Student类后,赋值给一个Student类对象Stu
【解释】:直接实例化的是一个子类Student,子类可以变为父类,去掉专属的属性和方法就好,转换的时候是可以的;又想调用子类的方法,强制转换保证可以转换为Student类
3.【异常】new子类,转换另一个子类
Person p=new Teacher();//实例化一个Teacher类,用Person类变量p接收,这里在隐式转换,想把子类转换为父类
Student stu=(Student) p;//强制将Teacher类对象p转换为Student类后,赋值给一个Student类对象Stu
【解释】:子类可以先变为父类,子类之间有各自专属的属相方法,想转换为另一个子类,会出错
4.【正常】new子类,转换为父类
Student stu=new Student();//实例化一个Student类,用Student类变量stu接收
Person p=stu;//强制将Student类对象stu 赋值给一个Person类对象p
【解释】:将stu赋值给一个Person类对象p,相当于子类转父类,可以转换
如果隐式转换不了,就需要强制转换,强制转换成功了然后才能调方法;可以隐式转换的就不需要强制转换
子类需要父类的方法,所以转换为父类对象,再去调用方法
但对于出现的异常,不希望发生在程序运行过程中,所以在代码编写阶段要有判断能不能转的方法。通过两种方法来判断:is能够检查异常,并排除异常,能转则转,不能转就提示。as 直接转,转不了就报错。(as有点不负责任。。。)
is 转换,返回是bool值,True就能转换,False就不能转换 ,转换不了时,在转换的时候就报异常
as 也是转换,但是,如果转不了的,不报异常,返回来的是NULL,转换不了时,在调方法的时候报异常
is可以做as做的事,is可以在运行时给出转换不了的提示,as运行时转换不了直接报错!
【C#】类——里式转换相关推荐
- Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...
Scala高级特性 1. 学习目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- php隐式转换,隐式转换如何使用?总结隐式转换实例用法
JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object.object是引用类型,其它的五种是基本类型或者是原始类型.我们可 ...
- scala当中的文件操作、网络请求和隐式转换
scala当中的文件操作.网络请求和隐式转换 文件操作和网络请求 读取文件当中每一行的数据 读取词法单元和数字 读取网络资源.文件写入.控制台操作 读取网络资源 文件写入操作 控制台交互操作 scal ...
- Scala _09样例类(case classes)隐式转换
样例类(case classes) 概念理解 使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类.实现了类构造参数的getter方法(构造参数默认被声明为val), ...
- 7.scala初识 柯里化、隐式参数、隐式转换、视图边界、上界、下界、协变、逆变
1.前言: 学过java我们都知道,java中的继承是对类的增强,java中的代理.装饰是对对象方法的增强.而在scala中,隐式转换和隐式参数是Scala中两个非常强大的功能,隐式的对类的方法进行增 ...
- scala 环境搭建 变量 值 数据类型 元组 表达式块 语句 函数 柯里化 集合 面向对象 隐式转换
scala (scalable的简写) scala是一个比较冷门的语言,不太被人们所知道 为什么这么冷门的语言现在被我们使用 很多的大数据的项目的源码是是用scala语言编写的. 因为大数据技术不断被 ...
- 一文看懂JS里隐式转换、toString() 和 valueOf()
js-看懂隐式转换toString 和 valueOf js隐式类型转换 数值类型和布尔类型的相加 字符串和数字相加 隐式类型转换隐藏一些错误 isNaN() 对象的隐式转换 强制类型转换 - &qu ...
- C++拾趣——类构造函数的隐式转换
之前看过一些批判C++的文章,大致意思是它包含了太多的"奇技淫巧",并不是一门好的语言.我对这个"奇技淫巧"的描述颇感兴趣,因为按照批判者的说法,C++的一些特 ...
- C++ 类的隐式转换
所谓类的隐式转换,就是将实参类型转成形参类型--如果不一致的话. 这个转换与基本类型转换不太一样,具体则是在形参类型的构造函数中使用实参类型的数据,从而构造出一个临时对象. 下面的代码,类Person ...
最新文章
- Oracle优化器:星型转换
- 假如鲁迅是程序员......
- MacBook Pro新版上市
- android 动态label,Android仿抖音实现动态壁纸
- android 插入gif,android – Gboard:在EditText上启用GIF插入
- 19n20c的参数_FQP19N20C电子元器件产品参数(BY 2021年)、Datasheet 文档资料和货源信息,FQP19N20C最新参考价格==www.ic37.com...
- 在MFC中调用DLL .
- React Native布局
- pandas 提取某几列_用pandas做数据清洗,我一般都这么干
- 【CarMaker学习笔记】行人穿过人行道、横穿马路观察自动驾驶车辆避让实验
- Java排序算法(一)——归并排序
- 力软部署oracle,力软敏捷开发框架
- php 程序设计代码教程
- 【毕设】selenium 爬取知网作者信息
- xubuntu20.04安装记
- 门店私域运营,突围线上冲击
- C语言————文件的打开(知识点总结+举例)
- 毕业设计-基于微信小程序的校园二手闲置物品交易系统
- 电子商务电子支付实训二
- Order-Independent Transparency
热门文章
- Anaconda环境管理
- debian10 nfs简单搭建
- NLPML_总结_20210208
- python pandas 如何找到NaN、缺失值或者某些元素的索引名称以及位置,np.where的使用
- 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积
- LeetCode简单题之二叉树中第二小的节点
- 写算子单元测试Writing Unit Tests
- Jittor框架API
- 深度人脸识别:CVPR2020论文要点
- [JS][编程题]括号匹配