特点:不限操作系统,不限应用程序类型,不限访问语言(通用类型系统,common style system , cst)。
包含:**库、.net公共语言运行库(common language runtime ,clr)(负责管理用。net 库开发的所有应用程序的运行)
编译过程:c#**microsoft中间语言(microsoft intermediate language , msil)由vs完成本机**由just-in-time 编译器即jit完成。
编译应用程序时,所创建的msil**存储在一个程序集中,程序集包括可执行应用程序文件(.exe)和其他应用程序使用的库(.dll)。
除包含msil**外还包含元信息(即程序集中包含的数据信息,也称为元数据)和可选的资源(msil使用的其他数据,例如声音文件和**)。元信息允许程序集是完全自我描述的,不会出现无法将需要的数据添加到系统注册表中的情况。
不必把运行应用程序所需要的所有信息都安装到一个地方。可以编写一些**,执行多个应用程序所要求的任务。此时,通常把这些可重用的**放在所有应用程序都访问的地方。
在。net framework中,这个地方是全局程序集高速缓存(global assembly cache ,gac)。方法是:
将包含**的程序集放在包含该高速缓存的目录下即可。
用。net framework编写的**在执行时是托管的,即clr管理着运行程序,其方式是管理内存、处理安全性,以及允许进行跨语言调试等。在c#中,只能编写在托管环境下运行的**,我们使用clr的托管功能,让。
net自己与操作系统交互。
提醒:需要许多内存才能运行的**应自己执行这样的检查,而不是坐等垃圾**。
在编译为msil语言的c#**不一定包含在单独的文件中,可以把应用程序**放在多个源**文件中,再把它们编译到一个程序集中,这个过程称为链接。好处在于处理几个较小的文件比处理一个大文件简单的多。
强大的语言:在c#中与c++比较高级的功能等价的功能(例如直接访问和处理系统内存),只能在标记为“不安全”的**中使用。
类型安全的语言:在类型之间转换时,必须遵守严格的规则。
区分大小写。
**的突出显示功能:#region name
#endregion
string的字符数没有上限。
占位符(格式字符串)的使用举例:
int myinteger = 17;
string mystring = blarblar”;
基本变量命名规则:变量名的第一个字符必须是字母、_或者@,其后的字符可以是字母下划线或数字。
命名约定:microsoft 建议,对于简单的变量,使用camelcase规则,而对于比较高级的命名则使用pascalcase。
逐字指定的字符串字面值:@”c:\temp\mydir\
注意:字符串是引用类型,而其他类型都是值类型,所以字符串也可以指定null值,即字符串变量不引用字符串。
举例说明运算符的位置与影响。
问:int var1, var2 = 5, var3 = 6;var1 = var2++ var3. var1的值是多少?
答:5*5=25 把运算符放在操作数的前面,则操作数实在进行其他任何计算前受到运算符的影响,而把运算符放在操作数的后面,则操作数是在完成表达式的计算后受到运算符的影响。
using用法:
1、简化对已创建命名空间中包含名称的访问,例:
namespace levelone
//nameone defined;}
using levelone;
/nameone...
2、为命名空间提供一个别名,作为using语句的一部分。
levelone命名空间中的**把引用为namethree,把引用为。
如果using语句声明如下:
这样全局命名空间中的**和levelone命名空间就可以使用。
注意:using语句本身不能访问另一个空间中的名称,除非命名空间中的**以某种方式链接到项目上,或者**是在该项目的源文件中定义的,或在链接到该项目的其他**中定义的。using语句只是便于我们访问这些名称,减少**量。
条件布尔运算符。
&和||运算符与&和|运算符的区别是性能比较好:
如果&&的第一个操作数为false,就不需要考虑第二个操作数的值了,同样,如果第一个操作数是true,||运算符就直接返回true,无需考虑第二个操作数的值。而&和|的操作数总是要计算的。故要尽可能使用&&和||。
a<>b相当于a/2并丢弃余数进行b次。
:运算符最常见用法: year you will h**e a balance of ” totalyears , totalyears ==1 ? s” ,balance);
注意:switch分支中,一个case语句结束不能进入下一个case,但有一种情况例外,即一次检查多个条件,如下:
do循环的结构如下:
dowhile();
提示:while后的分号是必须有的。
break :立即终止循环。
continue :立即终止当前循环,继续执行下一次循环。
goto :可以跳出循环到已标志好的位置上。
return :跳出循环及其包含的函数。
隐式转换规则是:任何类型a,只要其取值范围完全包含在类型b的取值范围内,就可以隐式转换到类型b。其他具体见释疑文档。
两个关键字checked(expression) 和unchecked(expression)
例:short a = 267;
byte b;
b = checked((byte)a);
枚举,结构,数组。
enum typename
value1;
value2;
valuen;
声明这个新类型的变量:
typename varname;
varname =
枚举类型可提取的每个值都存储为该基本类型的一个值,在默认情况下,该类型为int。在枚举声明中添加类型,就可以指定其他基本类型:
enum typename :underlyingtype
value1;
value2;
valuen;
枚举的基本类型可以是byte , sbyte , short , ushort , int , uint , long ,ulong.
还可以使用一个值作为另一个枚举的基础值。
要获得枚举的字符串值,可以使用使用(string)显示转换是不行的,因为需要进行的处理并不紧紧是把存储在枚举变量里中的数据放在string变量中,而是更复杂一些。另外,也可以使用变量本身的tostring()命令。
也可以把string转换为枚举值,但其语法略复杂一些。有一个特定的命令用于这种类型的转换,即使用方式如下:
enumberationtype)
struct
要让调用结构的**访问该结构的数据成员,可用关键字public。
1、声明数组。
数组的初始化有两种方式:可以以字面形式指定数组的完整内容,也可以指定数组的大小,再使用关键字new初始化所有的数组元素。
int myintarray =
int myintarray = new int[5];(各元素默认数值为0)
也可以使用非常量的变量来进行初始化:
int myintarray = new int[arraysize];
也可以两者结合的方式声明,数组大小必须与元素个数相匹配:
int myintarray = new int[5];
也可以使用非常量的变量来进行初始化,但该变量必须是常量。
const int arraysize = 5;
int myintarray = new int[arraysize];
2、foreach循环。
foreach( in )
//can use for each element
foreach 对访问数组只进行只读访问,不能修改。
3、多维数组。
double[,]hillhight =
第一位指定花括号,第二位指定花括号内的元素。
VC 入门经典学习笔记
vc 入门经典学习笔记。一函数。这里是源码 a.函数是具有用途的自包含的 块。函数名既是函数的标识,用来在程序中调用函数。如果函数名不在名称空间中定义,它就是全局的,否则就要用名称空间的名称来限定他。b.函数的主要优点之一是根据需要可以在程序的不同位置执行任意次。如果不能将 块封装到函数中,则程序将...
VC入门经典学习笔记剖析
一函数。这里是源码 a.函数是具有用途的自包含的 块。函数名既是函数的标识,用来在程序中调用函数。如果函数名不在名称空间中定义,它就是全局的,否则就要用名称空间的名称来限定他。b.函数的主要优点之一是根据需要可以在程序的不同位置执行任意次。如果不能将 块封装到函数中,则程序将最终成为庞然大物,因为那...
算法竞赛入门经典笔记
如果用这个程序。控制人造卫星发射,难道当卫星 之后你还可以向别人炫耀说 除了有一个加号被我粗心地写成了减号从而引起 之外,这个卫星的发射程序几乎是完美的。1.整数 整数 整数 浮点数 浮点数 浮点数 这条规则同样适用于加法 减法和乘法。2.一般来说,只要在程序中用到了数学函数,只需要在程序最开始的地...