浅析C# 中的类型系统(值类型和引用类型)
今天要写的东西都是书中一些概念性的东西,就当抄笔记,以提问对话的方式将其写出来吧,说不定以后面试能有点谈资~~~
Q1.C#1系统类型包含哪三点特性?
A1.C#1类型系统是静态的、显式的和安全的。
Q2.为什么称为静态类型?
A2.静态类型是用来描述表达式在编译时的类型,当声明一个类型的变量时,不能将变量指向其它类型的对象。
Q3.显式类型和隐式类型的区别?
A3.显式类型和隐式类型只有静态类型中的语言才有意义。显式类型需要显式声明一个变量的类型,而隐式类型则将类型的判断责任推给编译器,但是在编译时期,变量的类型是已知的。
Q4.值类型和引用类型,分别说下类、结构、数组类型、枚举、委托类型和接口类型属于上述哪一种类型?
A4.类是引用类型,结构是值类型、数组类型是引用类型、枚举是值类型、委托是引用类型、接口是引用类型。
Q5.判断下面表述对与错。
1.结构是轻量级的类。
2.引用类型保存在堆上,值类型保存在栈上。
3.对象在C#中默认是以引用传递的。
A5.上面的三个表述都是错的。
Q6.C#4中如果要使用动态类型,使用什么关键字?
A6.dynamic,如dynamic o = "kkk",这个类型判断的责任推给了运行时。
以上所述是小编给大家介绍的C# 中的类型系统(值类型和引用类型),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
相关推荐
-
一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C#程序员都会接触到的概念,也是C#程序员面试经常考到的知识,随便搜搜也有无数的文章讲解相关的概念,貌似没写一篇值类型,引用类型相关博客的不是好的C#程序员.我也凑个热闹,试图彻底讲明白相关的概念. 程序执行的原理 要彻底搞明白那一堆概念及其它们之间的关系似乎并不是一件容易的事,这是因为大部分C#程序员并不了解托管堆(简称"堆")和线程栈(简称"栈
-
C#中值类型和引用类型的区别深度分析
本文通俗易懂的分析了C#中值类型和引用类型的区别.分享给大家供大家参考.具体分析如下: 似乎"值类型和引用类型的区别"是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧.记得有一次电话面试中,我直接跟面试官说:"值类型是现金,引用类型是存折",后来想想当时说这话虽是有点儿冲动地脱口而出,但也没什么不妥.我这人不善于背理论的教条,喜欢
-
C#预定义数据类型之值类型和引用类型介绍
C#的预定义数据类型包括两种,一种是值类型,一种是引用类型.值类型的变量在内存中是存储在堆栈中的,字面上理解就是直接保存其值,如声明一个属于值类型的整型变量,并给它赋予另一个整型变量的值,则在内存中事先复制一个整型变量的值,然后将其赋予刚刚声明的整型变量,这时内存中就会有两个整型值.引用类型的变量在内存中是直接保存其值的引用.C#语言中大多数复杂数据类型都是引用类型. 先来一个值类型的常量的例子 根据用户输入圆的半径,求圆的面积的代码: using System; using System.Co
-
C#中值类型和引用类型解析
在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个概念从而在编程过程中遇到了很多问题,在这里博主浅谈对值类型和引用类型的认识. 首先从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.从而这两种类型存储在内存的不同地方. 其次从内存空间上看,值类型是在栈中操作,而引用类型则在堆中分配存储单元. 栈在编译的时候就分配好内存空间,在代码中有栈的
-
c# 引用类型与值类型的区别详解
解析:CLR支持两种类型:值类型和引用类型.用Jeffrey Richter(<CLR via C#>作者)的话来说,"不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能问题".这就要求我们正确理解和使用值类型和引用类型.值类型包括C#的基本类型(用关键字int.char.float等来声明),结构(用struct关键字声明的类型),枚举(用enum关键字声明的类型):而引用类型包括类(用class关键字声明的类型)和委托(用delegate关键字声明的特
-
C#值类型和引用类型的深入理解
从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.这两种类型存储在内存的不同地方.在C#中,我们必须在设计类型的时候就决定类型实例的行为.这种决定非常重要,用<CLR via C#>作者Jeffrey Richter的话来 说,"不理解引用类型和值类型区别的程序员将会给代码引入诡异的bug和性能问题(I believe that a developer who misunderstands the difference between reference types and
-
C#中的DateTime是值类型还是引用类型
近期遇到了DateTime到底是值类型还是引用类型的疑惑,顺势较深入地了解一下DateTime相关的内容 结论:DateTime是值类型,因为DateTime是结构体,而结构体继承自System.ValueType,属于值类型 一.DateTime是值类型还是引用类型的探索 二.了解DateTime结构体 三.DateTime.Now和DateTime.UtcNow是怎么计算出来的 一.DateTime是值类型还是引用类型的探索 1. 先编写测试代码 将dateTime1赋值给dateTime2
-
C#值类型、引用类型中的Equals和==的区别浅析
引言 最近一个朋友正在找工作,他说在笔试题中遇到Equals和==有什么区别的题,当时跟他说如果是值类型的,它们没有区别,如果是引用类型的有区别,但string类型除外.为了证实自己的说法,也研究了一下,以免误导别人,这里将研究结果总结一下,如果我有什么地方说的不对的地方,望指出. 相等性 在定义类或结构时,您将决定为类型创建值相等性(或等效性)的自定义定义是否有意义. 通常,当类型的对象预期要添加到某类集合时,或者当这些对象主要用于存储一组字段或属性时,您将实现值相等性. 您可以基于类型中所有
-
c#值类型和引用类型使用示例
在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对C#没有深入的了解学习,今天我带大家回顾下C#中的引用类型和值类型.CLR支持两种类型:引用类型和值类型.虽然FCL中大多数类型都是引用类型但程序中用的最多的还是值类型.引用类型总是从托管堆上分配的,C#的new操作会返回对象的内存地址--也就是指向对象的数据的内存地址.设想假设每次使用一个Int32值时,都进行一次内存分配,性能会受到多大的影响,为了提升简单.常用的类型
-
浅谈C#中的值类型和引用类型
一.基本概念 C#只有两种数据类型:值类型和引用类型 值类型在线程栈分配空间,引用类型在托管堆分配空间 值类型转为引用类型称成为装箱,引用类型转为值类型称为拆箱 以下是值类型和引用类型对照表 从上图可以简单看出:string,Object,数组,class是引用类型,简单类型,枚举,结构是值类型. 二.代码展示 定义一个类和结构调用赋值 内存分配情况如下图: 从这张图可以看出,class实例化出来的对象,指向了内存堆中分配的空间:truct实例化出来的对象,是在内存栈中分配. 修改代码如下: 内
随机推荐
- Android实现微信自动抢红包的程序
- Redis数据库的使用场景介绍(避免误用Redis)
- 使用jQuery实现页面定时弹出广告效果
- 用vbscript得到注册表中是否存在某个值
- java信号量控制线程打印顺序的示例分享
- sftp和ftp 根据配置远程服务器地址下载文件到当前服务
- java.net.MalformedURLException异常的解决方法
- 浅谈PHP命令执行php文件需要注意的问题
- PHP include任意文件或URL介绍
- python赋值操作方法分享
- Python实现字符串与数组相互转换功能示例
- mysql5.7 修改用户初始密码的方法
- java中进程与线程_三种实现方式总结(必看篇)
- JavaEE简介_动力节点Java学院整理
- C#实现系统托盘通知的方法
- 比较新旧两个数组值得增加和删除的JS代码
- asp运行特别慢之iis6假死现象的一种解决方法
- 浅谈java8中map的新方法--replace
- springcloud 中 zuul 修改请求参数信息的方法
- tensorflow识别自己手写数字