C#语言的基本类型包括8种整数类型、2种用于科学计算的二进制浮点类型、1种用于金融计算的十
进制浮点类型、1种布尔类型以及1种字符类型。
2.1 基本数值类型
C#中的基本数据类型都有关键字和它们关联
C#的所有基本类型都有一个短名称和一个完整名称。完整名称对应于BCL中命名的类型。这个名称在所有语言
中都是相同的,而且它对程序集里的类型进行了惟一的标识。因为基本数据类型是其他类型的基础,
所以C#为基本数据类型的完整名称提供了短名称或者缩写。其实从编译器的角度看,两种名称是完全一样
的,最终都将生成同样的代码。
2.1.2 浮点类型
浮点数的精度是可变的。如果读取本来是0.1的一个浮点数,那么可能很容易读取成0.099999999或者
0.100000001或者其他非常接近0.1的一个数.
float 有效数字7位 32bit
double 有效数字15-16位64bit
2.1.3 decimal类型
128bit 有效数字 28-29位,
与浮点数不同,decimal类型保证范围内的所有十进制数都是精确的。
比浮点数的精度高,但是范围小。
decimal类型的基数是十进制的,浮点类型的基数是二进制的。
2.1.4字面值
直接将一个值放到源代码中的行为称为硬编码,因为所以若是更改了值,就必须重新编译代码。一般可以
考虑丛个外部来源获取值,比如从一个配置文件中,这样一来,以后需要修改时候,就不需要重新编译代码了。
如
system.console.writelin(100);
2.2更多基本类型
bool char string
字符串
注:@
属性具有赋值方法和聚会方法的特殊方法,但是要使用字段的语言来访问那些方法。
string类型是不可变的,没有机制可供修改一个字符串的内容。只能重新赋值。
StringBuilder
当大量字符串需要修改,使用StringBulider 会修改变量中的数据,而不是返回一个新的字符串。
2.3 null 和 void
与类型有关的两额外的关键字是null和void。
null值表明变量不引用任何有效的对象,void表示没有类型,或者没有任何值。
1、null
null值只能赋给引用类型、指针类型和可空值类型。
从而使引用不指向任何位置。
没有赋值的引用与赋值null的引用不同。
没有赋值的引用,指向一个位置,但是通常不清楚该引用指向的位置,会造成内存访问的冲突之类的。
赋值null的引用,表明不指向任何位置。
2、void
void本质并不是一个数据类型,它只是用于指出没有数据类型这一事实。
隐式类型(匿名类型 anonymous type)的局部变量:C# 3.0添加了一个上下文关键字var,
它用于隐式类型的局部变量,只要代码在声明的同时初始化一个变量,就允许变量的数据类型是隐式的,但是生成 的CIL代码中,数据类型是固定(根据初始化的值判定)。
代码:
System.Console.Write("Enter Text:");
var text=System.Console.ReadLine();
var uppercase = text.ToUpper();
System.Console.WriteLine(uppercase);
var patent1 = new { Title = "title1", Content = "content1" };
Console.WriteLine(patent1.Title + "," + patent1.Content);
这种形式的操作是连接数据类型的关键,同时还能将特定的类型缩减为更少的数据元素,从而有效地
减少类型的大小。
2.4 类型的分类
所有类型都可以划分为两类:值类型和引用类型。它们的区别来源于它们的复制方式:值类型的数据问题
总是值被复制放到一块新的内存当中,而引用类型总是内存地址被复制到新一引用上。
值类型的变量直接包含值,也就是说变量引用的位置就是值在内存中实际存储的位置(直接寻址)。
引用类型和引用它们它们的变量指向数据存储位置(间接寻址),引用类型并不直接存储数据实际值,而是存储了此实际数据存放地(某一块内存当中)的内存首地址。
为了访问实际数据,运行时 要从引用类型的变量中读取此内存位置,然后再到此内存区域取得实际数据。
引用类型指向的内存区域称为堆(heap)。使用new申请的
引用类型实际保存的数据就是一个整型数据,根据处理器32位 或者 64位
2.5可空修饰符
一般来说,null值不能赋给值类型。因为值类型不能包含引用。
为了声明可以存储null的变量,要使用可空修饰符 ?
将null赋给值类型,这在数据库编程中尤为有用,在数据表中,经常出现值类型的列允许为空的情况
如:
int? count=null;
2.6数据类型之间的转换
有可能造成丢失数量级或者引发异常的任何转换都需要执行显式转型。
不会丢失数量级,而且不会引发异常的任何转换都属于隐式转型。
2.6.1显式转型
使用转型运算符
如:
long longNumber = 21512351235;
int intNumber = (int)longNumber;
注:checked和unchecked转换
在checked块内,如果在运行时发生一次溢出的赋值,就会引发一个异常。
在unchecked块内,如果发生溢出,它会将数据截断,而不是为块中的赋值引发异常。
注:C#不存在从一个数值类型到一个布尔类型的有效类型。
2.6.2隐式转型
无需使用转型运算符。
2.6.3 不进行转换的类型转换
由于没有定义从字符串到数值类型的转换,因此需要使用像Parse()这样的方法,每个数值数据类型都包含
一个Parse()方法,它允许将字符串转换成对应的数值类型。
如:
string cc= "9.11E-31";
float a = float.Parse(cc);
还有一种特殊类型,可以利用它将一种类型转换成另一种类型。Convert
不过Convert只支持预定义的数据类型(基本类型),而且是不可扩展。它允许从任何基本类型转换到
其他基本类型。
注:TryParse()
string cc = "9.11E-31";
float result;
float.TryParse(cc, out result);
Parse()和TryParse()区别在于,
1、Parse返回转换后的数据,并且如果转换失败,会引发异常
2、TryParse返回值是一个布尔值,代表是否转换成功,并且如果转换失败,并不会引发异常
2.7数组
数组的声明
一维数组
数据类型[ ] 数组名;
二维数组
数据类型[ , ] 数组名;
多维数组
数据类型[ , ,,,] 数组名;
交叉数组
数组类型[][] 数组名
注:交叉数组的每一个元素是一个数组(必须使用new来初始化)。
数组的实例化和赋值
1、声明数组的同时进行赋值
string[] languages = { "C#", "COBOL", "JAVA", "C++", "Visual Basic" };
只有在同一个语句声明并赋值时才可以省略new,如果是在声明之后才进行赋值,则需要使用new关键字和对应的数据类型
2、声明之后再进行数组赋值
string[] languages;
languages=new string[]{ "C#", "COBOL", "JAVA", "C++", "Visual Basic" };
自C#3.0起,不必在new后面指定数组的数据类型,只要数组元素的数据类型是兼容的即可,但是方括与仍是需要的。
3、声明的同时使用new进行数组赋值
C#还支持将new关键字作为声明语句的一部分使用
string[] languages = new string[] { "C#", "COBOL", "JAVA", "C++", "Visual Basic" };
使用new关键字,会让 运行时 为数据类型分配内存。
4、使用new关键字进行声明和赋值,并指定大小。
不论何时用new关键字作为数组赋值的一部分,都可以同时在广播号内指定数组的大小。
string[] languages = new string[5] { "C#", "COBOL", "JAVA", "C++", "Visual Basic" };
5、分配数组,但不指定初始值
string[] languages = new string[5];
分配一个数组但不指定初始值仍然会初始化每个元素。运行时 会将每个元素初始化为它们的默认值。
引用类型:null
数值类型:0
bool:false
char:'\0'
6、在运行时定义数组大小
size在运行时指定;
new string[size];
二维数组的初始化
int[,] cells = new int[,] {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
int[,] cells = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
注:且大小不一致的多维数组会造成错误;
交叉数组:
int[][] cells = new int[][] {
new int[] { 1, 2, 3 },
new int[] { 4, 5, 6, 7 }
};
int[][] cells = {
new int[] { 1, 2, 3 },
new int[] { 4, 5, 6, 7 }
};
数组的属性和方法
1、长度
Length 数组的长度是固定的,不能随便更改,除非重新创建数组。
对于交错数组,Length返回的是外部数组的元素数-----交错数组是由数组构成的一个数组,所以Length
只用于外部数组,统计它的元素数(也就是具体由多少个数组构成 ).
2、方法
静态方法Sort() BinarySearch() Reverse() 和 Clear()等。
实例方法:GetLength() Rank Clone()
2.7.4字符串可作为数组使用
但是也是不可变的数组。
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- PHP语法(二):数据类型、运算符和函数
相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 这次整理了PHP的数据类型.运算符和函数. ...
- Mysql学习笔记(二)数据类型 补充
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
- python基础(二)-------数据类型
python开发基础篇(二)数据类型 python数据类型有: 1.数字 1.只能存放一个值 2.一经定义,不可更改 3.直接访问 主要的分类为:整型,长整型,(python2有长整型的概念Pytho ...
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- excel的宏与VBA入门(二)——数据类型与变量
一.属性与方法 1.属性 上面单击对象,下面即显示对应的属性: 2.方法 双击左上的对象,即可看到相应的方法: 二.数据类型 到 Boolean True 或 False , 到 , ,,, 到 ,, ...
- Hive(二)【数据类型、类型转换】
目录 一.基本数据类型 案例实操 二.集合数据类型 案例实操 Map类型 三.类型转换 1.隐式类型转换 2.显示(强制)类型转换 一.基本数据类型 HIVE MySQL JAVA 长度 例子 TIN ...
- MySQL(二) 数据库数据类型详解
序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过 ...
- c#学习<二>:数据类型
基元类型 编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到Framework类库(FCL)中存在的类型(BCL是FCL的子集). C#中的基元类型 BCL类型 ...
- 循序渐进Python3(二) -- 数据类型
数据类型 一.数字(int) Python可以处理任意大小的正负整数,但是实际中跟我们计算机的内存有关,在32位机器上,整数的位数为32位,取值范围为 -2**31-2**31-1,在64位系统上,整 ...
随机推荐
- Arbitrage
Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit o ...
- 2.JQuery AJAX
new ActiveXObject("Microsoft XMLHTTP")是IE中创建XMLHTTPRequest对象的方法.非IE浏览器创建方法是new XmlHttpRequ ...
- 【Express】请求和响应对象
浏览器发送的信息 app.get('/headers', function(req, res){ res.set('Content-Type', 'text/plain'); var s = ''; ...
- C数组的相关知识
数组的定义:具有相同数据类型的集合.在内存中开辟连续的存贮空间,从上往下,依次存储 补充:内存是以字节位单位的存储空间,内存中的每一个字节都唯一对应一个编号.这个编号就是地址.只要是存在内存中的数据都 ...
- ACM编程网站
ACM:ACM国际大学生程序设计竞赛(英文全称:ACM International Collegiate ProgrammingContest(ACM-ICPC或ICPC)是由美国计算机协会(ACM) ...
- poj 1149 最大流
题目链接:http://poj.org/problem?id=1149 #include <cstdio> #include <cmath> #include <algo ...
- prim模板题
题目链接:http://acm.hrbeu.edu.cn/index.php?act=problem&id=1223 #include <cstdio> #include < ...
- about variables
局部变量(Local Variable),全局变量(global variable),变量共享; 静态局部变量(static local variables),函数运行结束变量值不会消失,并且其它函数 ...
- 关于STM32 RTC的使用
直接上代码,很爽. 1.RTC的首次初始化问题 使能时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE) ...
- Hibernate知识点总结
Hibernate配置二级缓存: --- 使用EhCache 1.hibernate.cfg.xml中配置二级缓存 <hibernate-configuration> <ses ...