.NET FRAMEWORK平台
- .NET FRAMEWORK也可运行在其他操作系统上,例如:Mono,他是.net framework的开源版本
可运行在linux、mac、ios、android - . net framework主要包含庞大的代码库和公共语言运行库(Common Language Runtime,CLR)
CIL和JIT
代码—(由vs完成)–>通用中间语言(Common Intermediate Language,CIL)—(编译器,Just In Time,JIT)—->本机代码
程序集
程序集包括可执行的应用程序文件(.exe文件)和其他应用程序使用的库(dll文件)。
程序集包含CIL代码、元数据(程序集中包含的数据信息)和可选资源(CIL使用的其他数据,如声音、图片)
托管代码
在将代码编译为CIL,再用JIT编译为本机代码后,CLR还需要管理正在执行的用.NET FRAMEWORK编写的代码。即CLR管理着应用程序,其方式是管理内存、处理安全性以及允许进行跨语言调试等。相反,不受CLR控制的应用程序属于非托管类型。
垃圾回收
GC只针对托管代码
GC会定期检查计算机内存,从中删除不再需要的内容,垃圾回收的时间并不固定,可能一秒执行数千次检查,也可能几秒才执行一次
全局程序缓存集(GAC)
字符串是引用类型
goto语句
c#允许给代码加上标签,使用goto直接跳转到这些代码行上。
优点:这是控制什么时候执行哪些代码的一种简单方式。
缺点:过多的使用将使代码晦涩难懂。
用法: goto 标签名;
标签定义: 标签名:代码
int myInteger = 5;
goto mylable;
myInteger += 10;
mylable:
Console.WriteLine("myInteger={0}", myInteger);
switch语句
一个case语句处理完后,不能自由的进入下一个case语句,但是有个例外,如果把多个case语句放在一起,其后加一个代码块,实际是一次检查多个条件,如果满足这些条件中的任何一个,就会执行代码。
循环的中断
break—立即中断循环
continue—立即终止当前循环,继续执行下一次循环
goto—可跳出循环
return–跳出循环及函数
使用goto时,退出循环是合法的,从外部进入循环是非法的
类型转换
在将一个值放在一个变量中时,如果该值过大,不能放在该类型的变量中,就会导致溢出,这就需要检查
checked和unchecked检查
byte de;
short so = 281;
de = checked((byte)so);
Console.WriteLine("sd={0}", so);
Console.WriteLine("de={0}", de);
以上代码会出现错误,用unchecked代替checked,会得到同样结果,但不报错。
枚举
枚举的基本类型可以是byte、sbyte,short,ushort,int,uint,long,ulong
在枚举声明中添加类型,就可以指定其他基本类型,如果不制定,则默认为int
默认情况下,每个值都会根据定义的顺序(从0开始),被自动赋予对应的基本类型,可以使用‘=’来重写这个赋值的过程,指定每个枚举的实际值
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
class Program
{
static void Main(string[] args)
{
byte directionByte;
string directionString;
orientation myDirection = orientation.north;
Console.WriteLine("myDirection = {0}", myDirection);//输出north
directionByte = (byte)myDirection;//把枚举值转换为其他类型,必须使用显示转换
directionString = Convert.ToString(myDirection);//获得枚举字符串的值,使用Convert.ToString
Console.WriteLine("byte equivalent = {0}", directionByte);//输出1
Console.WriteLine("string equivalent = {0}", directionString);//输出north
Console.ReadKey();
}
}
如果将byte类型转换为枚举类型也要显式转换
myDirection=(orientation)directionByte;
String类型转换枚举类型
string myString = "north";
orientation myDirection = (orientation)Enum.Parse(typeof(orientation), myString);
结构
使用struct声明结构,要让其他地方的代码访问结构的数据成员,可以使用public修饰
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
struct route
{
public orientation direction;
public double distance;
}
class Program
{
static void Main(string[] args)
{
route myRoute;
int myDirection = -1;
double myDistance;
Console.WriteLine("1) North\n2) South\n3) East\n4) West");
do
{
Console.WriteLine("Select a direction:");
myDirection = Convert.ToInt32(Console.ReadLine());
}
while ((myDirection < 1) || (myDirection > 4));
Console.WriteLine("Input a distance:");
myDistance = Convert.ToDouble(Console.ReadLine());
myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;
Console.WriteLine("myRoute specifies a direction of {0} and a " +
"distance of {1}", myRoute.direction, myRoute.distance);
Console.ReadKey();
}
}
数组
foreach对数组内容进行只读访问,所以不能改变任何元素的值
声明二维数组 int[,] name;
声明多维数组 int[,,,] name;
数组的数组
2种方式的初始化
shuzu =new int[2][];
shuzu[0]=new int[3];
shuzu[1]=new int[4];
第二种方式/
int[][] shuzu={new int[] {1,2,3,},new int[] {1},new int[] {1,2}};
string
string类型变量可以看成是char的只读数组
Trim()命令不只是去前后空格,也可删除其他字符,只要在一个char数组中指定这些字符即可
char[] chars = { ' ', 'e', 's' };
string str = "Yeeees";
str = str.Trim(chars);//值是Y
TrimStart()去前空格,TrimEnd()去后空格。这些命令都可以指定char数组
PadLeft()左边加空格,PadRight()右边加空格。使字符串达到指定长度
string str="aligned";
str=str.PadLeft(10);//值是" aligned"
也可以添加指定字符达到指定长度
str=str.PadLeft(10,'-');//值是"---aligned"
参数数组
c#允许为函数指定一个特殊的参数,这个参数必须是函数定义中的最后一个参数,称谓参数数组。参数数组允许使用个数不定的参数调用函数,可使用params关键字定义他们
参数数组可以简化代码,因为在调用代码中不必传递数组,而是传递同类型的几个参数,这些参数会被放在可在函数中使用的一个数组中
static int Sumvals(params int[] vals)
{
int sum = 0;
for (int i = 0; i < vals.Length; i++)
{
sum += vals[i];
}
return sum;
}
static void Main(string[] args)
{
int sum = Sumvals(1, 5, 2, 9, 8);
Console.WriteLine("结果是:" + sum.ToString());
}
调试和错误处理
Debug.WriteLine();//仅在调试模式下运行,不能编译为可发布程序,在发布版本中,该命令会消失
Trace.WriteLine();//可以编译为发布程序
进入中断模式
进入中断模式的方式有2种:
1.抛出未处理异常时
2.生成判定语句(assertion)时
Debug.Assert();
Trace.Assert();//发布后如果触发判定语句,用户会看到提示框,仅在判定条件为false时触发
Trace.Assert(myvar < 10, "数值超出界限", "请检查错误");
要在监视窗口中添加变量,可以把变量从源代码拖动到该窗口中
本文来自博客园,作者:NE_STOP,转载请注明原文链接:https://www.cnblogs.com/alineverstop/p/18004711