变量


声明语法

datatype identifier;

如:int i; //声明一个int类型的变量,但是在没有初始化之前编译器不允许使用该变量

同时声明多个

int a,b;//同时声明两个int类型的变量

错误示例

int x,bool y;

备注:如果在 一条语句中声明和初始化了多个变量,那么所有的变量都具有相同的数据类型;声明不同类型的变量,需要使用单独的语句

变量初始化

C#需要使用某个初始化对变量进行初始化,之后才能在操作中引用该变量,C#使用两种方法来确保变量在使用前进行了初始化

  • 变量是类或者结构中的字段,如果没有显示初始化,创建这些变量时,默认值就是.NetFramework类型默认值(引用类型为null,值类型为0)?
  • 方法的局部变量在代码中必须被显式初始化,之后才能使用,否则编译器会产生异常

C#中实例化一个引用对象需要使用new关键字,把该引用指向存储在堆上的一个对象

类型推断

类型推断使用var关键字,编译器可以根据变量的初始化值""推断"变量的类型,规则如下

  • 变量必须初始化,否则编译器就没有推断变量类型的依据
  • 初始化器不能为空
  • 初始化器必须放在表达式中
  • 不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象

常量

常量是其值在使用过程中不会发生的变量,在声明和初始化变量时,在变量前加上关键字const.就可以把该变量指定为一个常量

常量具有以下特点

  • 常量必须在声明时初始化,指定其值后,就不能改写了
  • 常量的值必须能在编译时用于计算,因此不能从一个变量中提取的值来初始化常量.如果需要,应该使用只读字段
  • 常量总是静态的,但是不必(实际上,是不允许)在常量声明中包含修饰符static

预定义数据类型

C#中把数据类型分为两种

  • 值类型
  • 引用类型

从概念上看,其区别是值类型直接存储其值,而引用类型存储对值的引用;这两种数据类型存储在内存中的不同地方,值类型存储在堆栈中,而引用类型存储在托管堆中

string str=null; //引用类型可以初始化值为null,表示不引用任何对象 

如果将引用设置为null,就不能对它调用任何非静态的成员函数或字段,这么做会在运行期间抛异常;CLR会定期删除不能访问的对象,把他们占用的内存返回给操作系统,这是通过垃圾回收器实现的

C#中的基本预定义类型并没有内置于C#语言中,而是内置于.NET Framework中,比如声明一个int类型变量时,实际上是声明.NET结构System.Int32的一个实例,这表示在语法上,可以把所有的基本数据类型看成支持某些方法的类,C#中所有的数据类型都以与平台无关的方式定义,以备将来C#和.NET迁移到其他平台上

C#中的预定义值类型主要有:整型/浮点类型/布尔类型/字符类型

  • 整型:C#支持8个预定义整数类型,int/short/byte/long/uint/ushort/sbyte/ulong,C#中所有的整数类型的变量都能被赋予十进制或十六进制的值,后者需要使用0X前缀;如果对一个整数是int/uint/long/ulong没有任何显式的声明,则该变量默认为int类型
  • 浮点类型:float数据类型用于较小的浮点数,因为要求的精度较低,double数据类型比float数据类型大,提供的精度也大一倍;如果在代码中对某个非整数值硬编码,则编译器一般假定该变量是double,如果想指定该值为float,可以在其后加上字符F(或f);C#中提供了一种专用类型进行财务计算,这就是decimal类型,精度上来看:float<double<decimal.要注意的是:decimal类型不是基本类型,所以在计算是可能会存在装/拆箱操作,会有性能损失.要把数字指定为decimal类型,而不是double/float或整型,可以在数字后加上字符M(或m)
  • 布尔类型:bool类型包含值true/false.bool值和整数值不能相互隐式转换
  • 字符类型:为了保存单个字符的值,C#支持char数据类型,表示一个16位的(Unicode)字符,char类型的字面量是用单引号括起来的,如果把字符放在双引号中,编译器会把它们看成字符串,从而产生错误

C#中的预定义引用类型主要有:object/string

  • object:C#中,object是所有类型的基类,所有的内置类型和用户自定义类型都是从它派生而来;可以用object引用绑定任何子类型的对象;object类型实现了一般用途的基本方法,包括Equals()/GetType()/ToString()等常用方法
  • string:String对象被分配在堆上而不是栈上,因此当把一个字符串变量赋予另一个字符串时,会得到内存中对同一个字符串的两个引用,但是string类型与引用类型的常见行为有一些区别,字符串是不可改变的,修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串不发生任何变化
 static void Main(string[] args){string a = "1";string b = a;Console.WriteLine("a:" + a);Console.WriteLine("b:" + b);a = "2";Console.WriteLine("a:" + a);Console.WriteLine("b:" + b);Console.ReadKey();} 输出:a:1b:1a:2b:1  

C#中的流程控制语句主要有:If/Switch

C#中的循环主要有:for/while/do...while/foreach()可以迭代集合中的每一项,要使用集合对象,就必须支持IEnumerable接口.foreach不能改变集合中各项的值


枚举

枚举是用户自定义的整数类型,在声明一个枚举时,要指定该枚举的实例可以包含的一组可接受的值.枚举更利于维护,使代码更加清晰.使用时也使得代码更易输入


转载于:https://www.cnblogs.com/GnailGnepGnaw/p/10596753.html

变量/值类型/引用类型/常量/枚举相关推荐

  1. C#值类型-引用类型

    转换-值类型-引用类型-预定义分类表 转换 C#里,兼容的实例间可以进行相互转换 转换总是从一个值转换成一个新的值 隐式转换:隐式转换是自动发生的 显式转换:显式转换是手动操作的 长整型转换成整型的时 ...

  2. javascript基本数据类型与值类型引用类型说明

    DEMO: http://sources.ikeepstudying.com/jsdata/ 摘要:本文主要讲了javascript中的基本数据类型,以及值类型和引用类型的区别与使用 一.基本数据类型 ...

  3. iOS开发-Swift进阶之值类型 引用类型!

    本文主要介绍为什么结构体是值类型,类是引用类型 值类型 图片看不了请前往简书 前提:需要了解内存五大区,,如下所示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFI ...

  4. 关于C#值类型,引用类型,值传递,引用传递

    说到参数传递,必须得弄清值类型和引用类型: (为了容易表达,我暂且命名存放在堆中的内容为堆中对象,存放在栈上的内容为栈中对象.) 值类型存放在栈中,直接访问.如果有:int a=0;int b=a;就 ...

  5. C#基础_值类型引用类型(十一)

    值类型和引用类型: 值类型包括:byte,short,int,long,char,float,double,bool,struct结构 引用类型包括:类类型,接口类型和数组 等. 值类型和引用类型特点 ...

  6. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱

    引言 本篇文章主要介绍.NET中6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱.文章开始介绍当你声明一个变量时,编译器内部发生了什么,然后介绍两个重要的概念:栈和堆:最后介绍值类型和引用类型,并 ...

  7. 值类型 引用类型 堆栈 堆 之 异想

    看了很多值类型 和 引用类型的文章(谷歌能搜索出来的) 看了越多疑问越大,而这些资料中没有具体的说明. 问题: 1.堆栈 和 堆 分别存于计算机的哪个硬件(CPU缓存,内存,硬盘)? 2.为什么只有值 ...

  8. C# 值类型 引用类型 作为参数传递区别

    C#数据类型分类: http://msdn.microsoft.com/zh-cn/library/t63sy5hs(v=VS.80).aspx. 值类型作为参数传递: http://msdn.mic ...

  9. 栈,堆,值类型,引用类型,装箱,拆箱 .NET中 6个重要的概念

    == 转载于:https://www.cnblogs.com/xiao-hei/p/3847525.html

最新文章

  1. 知乎2w人关注,没有工程开发经验的人是怎么找到工作的?
  2. 包含了主机名到ip地址的映射关系的文件是什么 ?
  3. 应用程序的并行配置不正确_阿里架构师:天天高并发,达不到百万以上并发都不叫高并发...
  4. Linux C :系统调用-fork,wait,subreaper
  5. java多线程的实现方式_Java 多线程(一)——多线程的实现方式
  6. arm 指令1(转)
  7. QML笔记-JavaScript在QML中的使用(直接调用和间接调用)
  8. web安全day12:PKI
  9. trace (矩阵的迹) 的性质
  10. ubuntu安装vasp_Ubuntu下p4vasp的安装
  11. 2022年全网首发|大数据专家级技能模型与学习指南(胜天半子篇)
  12. 2021年茶艺师(初级)考试及茶艺师(初级)新版试题
  13. 新西兰计算机设计专业,2020年出国新西兰学习计算机专业的要求是什么?
  14. 【NiosII训练】第二篇、FPGA驱动AD9854高级篇
  15. 将整型数字转化成大写格式
  16. iOS开发- 以图搜图功能实现 (源码+解析)
  17. 证件照的要求是什么?
  18. 大数据知识点总结笔记
  19. 关于电影的HTML网页设计-威海影视网站首页-电影主题HTM5网页设计作业成品
  20. nx.jaccard_coefficient报错not implemented for directed type

热门文章

  1. php 去除中英文空格,php去除字符串首尾中英文空格程序-PHP源码
  2. HTML5圆形线性渐变,css中linear-gradient()函数是干什么的?实现线性渐变的圆形边框(代码)...
  3. aes算法的C语言实现代码,AES加密算法c语言实现代码
  4. atmel c keil 包_Keil C软件与AVR Atmega系列下载器使用
  5. html 后台参数attribute_平台管理后台与商家菜单资源管理:商家权限及其菜单资源管理设计...
  6. termux python 打开摄像头_【图片】将termux打造成合格的python环境(假装是教程贴)_termux吧_百度贴吧...
  7. Javascript JQuery获取当前元素的兄弟元素/上一个/下一个元素(转)
  8. matlab怎么输入输出文件,[转载]底层文件输入输出函数
  9. html 元素允许右键,JavaScript 自定义html元素鼠标右键菜单功能
  10. sonar检测java vue项目_Jenkins集成SonarQube 实现构建项目同时审查代码