数据
数据类型分为三大类:
1.值类型。
值类型又分为:1,简单类型,2.枚举类型,3.结构类型。
简单类型又分为:1.整数类型,2.浮点数类型,3.字符类型,4.decimal类型,5.布尔类型。
2.引用型。
引用型分为:1.类类型,2.接口类型,3.委托类型,4.数组类型。
3.指针类型。
指针类型主要应用于安全代码中。
值类型的数据存储在内存的栈堆中,可以提供快速访问。引用类型是指,指向存储在内存堆中的数据的指针或者引用。与存粹的地址不同,引用总是指向一个对象,且对象是具有指定的类型。并且在堆上分配了存储空间。
值类型均隐式的派生自System.ValueType,并且值类型不能派生出新的类。
引用类型的变量又称对象,是可存储对实际数据的引用。多个引用变量可以赋值给一个对象而如果声明了一个引用类型的变量却不给它赋值任何对象,那么它的默认值就是null或者0
转义字符:
转义符 | 含义 | 转义符 | 含义 |
\' | 单引号 | \f | 换页 |
\'' | 双引号 | \n | 换行 |
\\ | 反斜杠 | \r | 回车 |
\0 | 空字符 | \t | 水平tab |
\a | 感叹号 | \v | 垂直tab |
\h | 退格 |
隐式类型的局部变量
隐式类型的局部变量又叫匿名变量,使用var关键字来声明,可以用var声明任何类型的局部变量,他只是告诉编译器,该变量需要根据初始化表达式来推断变量的类型,而且只能是局部的。
同时匿名变量声明的同时必须赋值,声明一个匿名变量后不能给它赋另一个类型的值;匿名变量初始化不能为null空值,匿名变量仅限于声明局部变量。
变量
变量:就像是只能存放一件物品的盒子,可以在盒子里存放一件物品,存放的物品就是变量的值。
常量
常量:就是在程序运行过程中值保持不变的量,即在程序执行期间,常量的值不会发生改变。
[访问修饰符] const 类型 常量表达式;
常量的修饰符可以是 new ,public,protected,internal,private等。
运算符和表达式
一元运算符:一元运算符只有一个操作数,常见的一元运算符包括自加运算符“++”自减运算符“——”和逻辑非“!”
“++“可将操作数自身加1,”——“可将操作数自身减1,”!“是对表达式的值取反!
自加和自减在表达式的前后结果是不一样的。
表达式 | 类型 | 计算方法 | 结果(假如num=5) |
var1=++num1 | 前置自加 | num1=num1+1;var1=num1; | num1=6;var1=6; |
var1=num++ | 后置自加 | var1=num1;num1=num1+1; | num1=5; var1=6; |
var1=--num1 | 前置自减 | num1=num1-1;var1=num1; | num1=4; var1=4; |
var=num1-- |
后置自减 |
var1=num1;num1=num1-1; |
num1=5;var=4; |
简化运算符 | 等价表达式 | 简化运算符 | 等价表达式 |
n++和++n | n=n+1 | var1*=n | var1=var1*n |
n--和--n |
n=n-1 | var1/=n | var1=var1/n |
var1+=n | var1=var1+n | var1%=n | var1=var1%n |
var1-=n | var1=var1-n |
二元运算符
二元运算符就是需要两个操作数参与的运算符,也就是我们常用的”+“,”—“,”*“,”/“。
%取模,就是取除法运算的余数。
三元运算符
三元运算符要求有三个操作数。格式为;
操作数1?操作数2:操作数3;
三元运算符的运算,(其中操作数可以是数,也可以是表达式。)
如果操作数1为”真',则输出操作数2;如果操作数1为“假”,输出操作数3。所以三元运算符的输出结果取决于“?”前面的操作数1的真假。
变形即为:
if(操作数1)
{
Console.WriteLine(操作数2);
}
else
{
Console.WriteLine(操作数3);
}
数值类型数据减的隐式转换
隐式数据类型的转换适用于数值类型的数据转换
从左边的类型转换到右边的类型
sbyte | short,int,long,float,double ,decimal |
byte |
short,ushort,int,uint,long,ulong,float,double ,decimal |
short | int,long,float,double,decimal |
ushort | int,uint,long,ulong,float,double,decimal |
int | long,float,double,decimal |
uint | long,ulong,float,double,decimal |
long | float,double,decimal |
char | ushort,int,uint,long,ulong,float,double,decimal |
float | double |
ulong | float,double,decimal |
显式转换
显式转换又叫强制类型转换,需要用户明确指出转换的类型。通过显示转换可以把取值范围大的转换为取值范围小的数据。但是可能会引起信息的丢失。
使用Convert类转换
.NET Framework提供了很多类库。其中System.Convert类就是专门进行类型转换的类,通过Convert类提供的方法可以实现各种基本数据类型的转换。Convert类的常用方法
方法 | 说明 |
ToBoolean | 将指定的值转换为等效的布尔值 |
ToChar | 将指定的值转换为Unicode字符 |
ToDateTime | 将指定的值转换为DateTime |
ToDecimal | 将指定的值转换为Decimal数字 |
ToDouble | 将指定的值转换为双精度浮点数 |
ToInt16 | 将指定的值转换为16位有符号整数 |
ToInt32 | 将指定值转换为32位有符号整数 |
ToString | 将指定的值转换为其等效的String表示形式 |
装箱与拆箱
拆箱是把“引用”类型转换为“值”类型,装箱是把“值”类型转换为“引用”类型
例如:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int n = 4; object obj = n;//封箱,把任何值类型隐式的转换为object类型,其中object为引用类型 Console.WriteLine("n的初始值为:{0},装箱后的值为{1}",n,obj.ToString()); int m = (int)obj;//拆箱,把一个object类型隐式转换为值类型 Console.WriteLine("引用类型的值为{0},拆箱后的值为{1}",obj.ToString(),m); Console.ReadKey(); } } }
数值和字符串之间的转换
1.ToString() 方法:数值类型的ToString()方法可以将数值类型转化字符串。
2。Parse()方法:数值类型的Parse()方法可将字符串转换为数值型,如字符串转换为整型使用int.Parse(string),字符串转换为双精度浮点型使用double.Parse(string)等。
例如:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int num1 = 25; string str1 = num1.ToString();//num1的ToString()方法将num1转换为string赋给str1 string str2 = "38"; int num2 = int.Parse(str2);//int.Parse()方法将字符串str2转换为int类型 string str3 = "21"; double num3 = double.Parse(str3);//double.Parse()将字符串转换为双精度浮点型 string str4 = "56"; float num4 = float.Parse(str4);//float.Parse()将字符串转换为单精度浮点型 } } }
数组的定义和使用
数组:数组是一组名称和类型完全相同的变量的集合。但是必须在创建数组时就确定数组的大小。其中还数组既可以用于存储引用类型,也可以用于存储值类型。
一维数组的声明:
数组类型[数组的大小或容量] 数组名:
其中[]中的数组的大小或容量可以省略。
二维数组的声名:
数组类型[,]数组名:
例如;
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { int[,] array2D = new int[2, 3]; int[,] array2D2 = { { 1, 2, 3 }, { 4, 5, 6 } };//声明二维数组array2D2的同时初始化。 //声明一个3*3*3的三维数组array3D的同时初始化,可以将三维数组看做一个一维数组,这个一维数组的每一个元素是一个二维数组 int[, ,] array3D ={ {{1,2,3},{4,5,6},{7,8,9}},//三维数组第一行 {{4,2,4},{8,7,9},{1,4,5}},//三维数组第二行 {{1,8,0},{6,5,3},{7,5,6}},//三维数组第三行 }; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { array2D[i, j] = (i + 1) * (j + 1);//利用i和j的值进行初始化 } } for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { System.Console.Write(array2D[i, j]); } System.Console.WriteLine(); } Console.ReadKey(); } } }
Array类
System.Array类提供了创建,操作,搜索和排序数组的许多静态方法供程序调用,它是所有数组类型的抽象类不能直接从System.Array显示的派生自己的数组类型。
Array类常用的方法如下:
方法名 | 功能 |
Clear | 将Array中的元素值清除 |
Copy | 将一个Array的一部分元素复制到另一个Array中 |
Copy To | 将当前一维Array的所有元复制到指定的一维数组中。 |
Find | 搜索与指定胃词定义的条件匹配的元素,返回整个数组中的第一个匹配项 |
Find All | 检索与指定胃词定义的条件匹配的所有元素 |
FindIndex | 索搜与指定谓词定义的条件匹配的元素,返回Array或其某个部分中第一个匹配的从零开始的索引。 |
GetLength | 获取数组的指定维中的元素数。 |
GetValue | 获取当前数组中指定元素的值 |
IndexOf | 返回一维数组或部分数组中某个值第一个匹配的索引 |
Initialize | 通过调用值类型的默认构造函数,初始化值类型数组的每一个元素。 |
Reverse | 反转一维数组或部分数组中元素的顺序 |
SetValue | 将当前数组中的指定元素设置为指定值。 |
Sort | 对一维数组对象中的元素进行排序 |
ToString | 返回表示当前对象的string |
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string[] superStars={"Johnson","Tomson","Tiger","Anderson","Tony","Closze"}; Console.WriteLine("System.Array方法的举例:"); Console.WriteLine("Length方法获取数组元素的个数:{0}", superStars.Length); //superStars.GetLength(0)获取第一维元素个数; Console.WriteLine("GetLength()获取指定维的元素个数;{0}", superStars.GetLength(0)); Console.WriteLine("在没有调用Reverse的数组顺序;"); printArray(superStars);//输出数组的所有元素 Array.Reverse(superStars); //调用Array.Reverse反转数组的顺序 Console.WriteLine("调用Reverse方法后的数组顺序为:"); printArray(superStars);//输出数组的所有元素 Console.WriteLine("调用Sort方法后的数组顺序为:"); Array.Sort(superStars);//调用Array.Sort对数组排序。 printArray(superStars);//输出数组的元素 Console.Read();//暂停程序的执行,按任意键继续 } static void printArray(string[] array)//输出数组中所有元素的方法 { foreach (string element in array)//便利数组并输出 { Console.Write(element);//输出数组中的某个元素 Console.Write(" ");//输出的数组元素之间空三个格 } Console.WriteLine();//输出后换行 } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string[] superStars={"Johnson","Tomson","Tiger","Anderson","Tony","Closze"}; foreach (string star in superStars)//输出数组元素便于对比 { Console.WriteLine(" {0}",star); } //搜索与指定谓词定义的条件匹配的元素,返回整个Array中的第一个匹配项 Console.WriteLine("\nArray.Find返回第一个匹配项:{0}",Array.Find(superStars,FindStar)); //返回整个Array中最后一个匹配项 Console.WriteLine("Array.FindLast返回最后一个匹配{0}",Array.FindLast(superStars,FindStar)); //返回整个Array中的所有匹配项 Console.WriteLine("Array.FindAll返回所有匹配项"); string[] subArray = Array.FindAll(superStars, FindStar); foreach (string star in subArray) { Console.WriteLine(" {0}",star); } Console.ReadKey(); } private static bool FindStar(string s)//查找是否有指定的人;Tiger或Anderson { if ((s == "Tiger") || (s == "Anderson"))//如果找到返回true { return true; } else //如果没找到返回false { return false; } } } }
匿名数组
匿名数组就是隐藏类型的数组,这和匿名类型相同,不同的是类型为数组。匿名数组的语法就是用var替换具体的数据类型。
例如:
var array1 = new[] { 1, 2, 3, 4, 5 };
var array2 = new[] { 1, 1, 5, 2, 2.5 };
var array3 = new[] { "abc", "bcd", "dsd" };
枚举的定义和使用
枚举:是一组已经命名的数值常量。用来定义一组具有特定值得数据类型,是便于记忆的符号。通常使用关键字enum定义枚举语法如下
<访问修饰符>enum枚举名称(枚举对象)
例如:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { DayOfWeek ThisWeek;//定义一个枚举类型的实例变量 } } public enum DayOfWeek//定义枚举名称 { Monday,Tuesday,Wednesday,Thursday,Friday,Sunday//定义枚举对象的枚举值 } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { DayOfWeek day = DayOfWeek.Monday; int i = (int)DayOfWeek.Monday; Console.WriteLine(day); Console.WriteLine(i); Console.ReadKey(); } } public enum DayOfWeek//定义枚举名称 { Sunday=0, Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, //定义枚举对象的枚举值 } }