C#隐式转换与显示转换
System.Objec时C#中所有类型的基类,也就是万类之源。
一、值类型
值类型都继承自System.ValueType(派生自System.Objec),继承自System.ValueType的类型在CLR中具有特殊的行为,值类型变量直接包含它们的值。对于值类型变量,没有单独的堆分配或垃圾回收开销。
值类型分为两类:结构和枚举
1.结构
值类型为“密封”,也就是结构类型不能派生类型,并且不能把结构类型定义为从任何用户定义的类或结构继承,因为结构只能继承自System.ValueType。但是一个结构可以继承一个或多个接口。可将结构类型强制转化为Object类型或任何它所继承的接口类型,但这会发生装箱操作。
2.枚举
枚举定义的一组已命名的整型变量。所有的枚举都继承自System.Enum(继承自System.ValueType)。适用于结构的规则也适用于枚举。
二、引用类型
定义为类、接口、委托或数组的类型都是引用类型。在运行时,当声明引用类型的变量时,该变量为一直包含值null,直至使用new运算符显示创建对象,或为该变量分配已在其他位置使用new创建的对象。
三、装箱与拆箱
装箱:将值类型转化为Object类型或由此之类型实现的任何接口类型的过程。CLR对值类型进行装箱操作时,会将值包装到System.Object内部,再将后者存储托管堆中。
拆箱:拆箱就是从对象中取出值类型。
装箱是隐式的,拆箱是显式的。性能上,装箱和拆箱会造成一定的性能损失。对值类型进行装箱时必须分配并创建对象,拆箱时的强制转换也需要进行大量的计算。值得注意的是拆箱强转的值类型应与装箱时的值类型一致。
C#隐式转换与显示转换的更多相关文章
- 【C++自我精讲】基础系列五 隐式转换和显示转换
[C++自我精讲]基础系列五 隐式转换和显示转换 0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐 ...
- C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解
模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程.对于函数模板而言,模板实例化之后,会生成一个真正的函数.而类模板经过实例化之后,只是完成了类的定义,模板类的成员函数需要到调用时才会被初始 ...
- ahjesus自定义隐式转换和显示转换
implicit 关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 参考戳此 explicit ...
- C#隐式转换和显示转换举例--C#基础
高精度的数据类型转换为低精度的数据类型是显示转换,低精度的转换为高精度的是隐式转换. 温馨提示:不能说强制类型转换是从低精度到高精度. int a=666;float b=(float)a: 由a到b ...
- C++ 隐式类类型转换和转换操作符
隐式类类型转换 C++语言定义了内置类型之间的几个自动转换.也可以定义如何将其他类型的对象隐式转换为我们的类类型,或将我们的类类型的对象隐式转换为其他类型.为了定义到类类型的隐式转换,需要定义合适的构 ...
- C#隐式类型和显示类型
一,在程序中我们经常会遇到:无法将类型“XXX”隐式装换为“XXX”,如下例子: static void Main(string[] args) { int i; i = "Hello Wo ...
- android intent 隐式意图和显示意图(activity跳转)
android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity B ...
- Selenium2设置隐式等待和显示等待
1. 设置显示等待 Java代码: public static WebElement WaitForElement(WebDriver driver, String locator) { WebEle ...
- Android 隐式意图和显示意图的使用场景
本文实现一个隐式意图的应用,激活短信应用 public void click4(View view) { Intent intent = new Intent(); intent.setAction( ...
随机推荐
- C# 填充Excel图表、图例背景色
填充背景色,一般可以选择多种不同样式来填充背景,包括填充为纯色背景.渐变背景.图片背景或者纹理背景等.下面的内容将分别介绍通过C#来设置Excel中图表背景色.以及图表中的图例背景色的方法. 使用工具 ...
- SAP MM已经转成PO的采购申请Item依旧可以被删除?
SAP MM已经转成PO的采购申请Item依旧可以被删除? 笔者测试发现,我们可以删除已产生PO的PR item, 系统只是给一个警告信息,不阻止保存. Purchase orders already ...
- Git原理与命令大全
Git (wiki: en chs )是一个免费开源的分布式版本控制系统,由linux内核作者linus Torvalds开发,大型开源项目linux kernel.Android.chromium ...
- Flink源码分析 - 源码构建
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...
- 一张图看懂 SQL 的各种 join 用法
下图展示了 LEFT JOIN.RIGHT JOIN.INNER JOIN.OUTER JOIN 相关的 7 种用法. 具体分解如下: 1.INNER JOIN(内连接) 2.LEFT J ...
- PHP错误:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
使用PHP连接MySQL 8的时候,可能会发生如标题所示的错误: SQLSTATE[HY000] [2054] The server requested authentication method u ...
- 【死磕 Spring】----- IOC 之 注册 BeanDefinition
原文出自:http://cmsblogs.com 获取 Document 对象后,会根据该对象和 Resource 资源对象调用 registerBeanDefinitions() 方法,开始注册 B ...
- Pytorch实战1:线性回归(Linear Regresion)
GitHub代码练习地址:https://github.com/Neo-ML/MachineLearningPractice/blob/master/Pytorch01_LinearRegressio ...
- [Inside HotSpot] Java的方法调用
1. 方法调用模块入口 Java所有的方法调用都会经过JavaCalls模块.该模块又细分为call_virtual调用虚函数,call_static调用静态函数等.虚函数调用会根据对象类型进行方法决 ...
- 架构师系列文:通过Spring Cloud组件Hystrix合并请求
在前文里,我们讲述了通过Hystrix进行容错处理的方式,这里我们将讲述通过Hystrix合并请求的方式 哪怕一个URL请求调用的功能再简单,Web应用服务都至少会开启一个线程来提供服务,换句话说,有 ...