zoukankan      html  css  js  c++  java
  • 【C#】基础知识

    • 变量的作用域和访问级别
    • 申明各种数据类型的变量
    • 在C#程序中控制执行流
    • 注释和XML文挡说明
    • 预处理器指令
    • 用法规则和命名规定(略)

     

    1.编译运行C#程序:新建xx.cs文件->设置环境变量->打开命令行提示符->cscxx.cs->编译代码->自动生成xx.exe 注意:未设置环境变量的两种解决方法:(1)运行csc之前,命令行运行批处理文件%Microsoft Visual Studio2005%\Common7\Tools\vcvars32.bat,其中,Microsoft Visual Studio2005是安装VS2005的安装目录.(2)开始->程序->Microsoft VisualStudio 2005->Microsoft Visual StudioTools子菜单->Microsoft Visual Studio 命令提示

    2.修饰符static表示方法不能在特定实例上执行,因此不必先实例化类再调用。

    3.变量:datatype(数据类型)identifier(变量名)

    int i;编译器不让我们使用变量,除非初始化该i变量,但它在堆栈中分配了4个字节以保存其值。

    变量的初始化:(1)值类型初始化:int i=1;(2)引用类型初始化:SomethingobjSomething =new Something();

    4.变量作用域:可以访问该变量的代码区域

    (1)同名变量不能在同一作用域内申明两次:如int i=20;...;inti=30;是错误的

    (2)循环内部同名变量可以在同一作用域内申明两次:如for(int i=0;i<10;i++){...};for(inti=9;i>=0;i--){...};是正确的。

    (3)同名变量在循环体外只能申明一次,不能在循环内继续申明。

    (4)字段(申明为类型级的变量)和局部变量(申明为方法级的变量)在同一作用域不冲突:classcar{static int i=20;public static voidMain(){int i=30;Console.WriteLine(i);return;}}

    如何引用类级变量?object.fieldname(类名.字段名)

    如何访问实例字段(该字段属于类的一个特定实例)?this.fieldname(this.字段名)

    5.常量:const inti=20;(值不会在使用过程中发生变化称~,在C#中只把局部变量和字段申明为常量)

    常量特性:(1)必须声明时初始化,指定值后不修改(2)在编译时能用于计算(3)常量总是静态的,不必用static修饰(4)用易于理解的清楚的名称代替了不明确的数字或字符串(5)使程序更易于修改(6)易于避免程序出错。

    6.预定义数据类型:值类型(存储在堆栈中)、引用类型(存储在托管堆中)。

    y=null;(表示不引用任何对象),基本数据类型int、bool、long都是值类型;而复杂的包含许多字段的较大类型(通常有类的情况下)规定为引用类型。

    7.CTS类型:(如上一章介绍)string s=i.ToString();inti=s.ToInt32();

    8.预定义的值类型:基本数据类型(整型、浮点类型、字符类型、bool类型)+引用类型

    (1)基本数据类型:

    整型(8个):sbyte(System.SByte)8位有符号整数、short(System.Int16)16位有符号整数、int(System.Int32)32位有符号整数、long(System.Int64)64位有符号整数、byte(System.Byte)8位无符号整数、ushort(System.Uint16)16位无符号整数、uint(System.Uint32)32位无符号整数、ulong(System.Uint64)64位无符号整数。(无符号:0~2n-1,有符号:-2n-1~2n-1-1)

    uintui=1234U;long l=1234L;ulong ul=1234UL;

    浮点型(2个):float(System.Single)32位单精度浮点数(n=7位)、double(System.Double)64位双精度浮点数(n=15/16位).

    未指定非整数类型则默认为double类型。如想指定为float,则最后加字符F(或f):floatf=12.3F;

    Decimal类型(1个):decimal(System.Decimal)128位高精度十进制数表示法(n=28位),专用类型以及算财务货币。decimald=12.30M(精度更大的数字)

    Bool类型(1个):bool(System.Boolean),值为true或false.注意:bool值和整数值不能相互转换。

    字符类型(1个):char(System.Char),表示一个16位的Unicode字符。注意:不允许在char类型和8位byte类型间进行隐式转换。虽然8位足够编码英语中的每个字符和0~9数字了,但他们不够编码更大的符号系统中的每个字符(比如中文),因此有了16位Unicode模式,ASCII编码就是Unicode的一个子集。chara=‘A’(字符用单引号而不用双引号)。4位16进制Unicode值:'\u0041';带有数据类型转换的整数值:(char)65;表示16进制数:'/x0041'.

    转义序列:\' 单引号 、\''双引号、\\ 反斜杠、\0 空、\a 警告、\b 退格、\f 换页、\n 换行、\r回车、\t 水平制表符、\v垂直制表符

    注意:C#本身有一个string类型,所以无须将字符串表示为char类型的数组。

    (2)引用类型:

    object(System.Object)根类型,CTS中的其他类型都是从它派生而来的(包括值类型)

    string(System.String)Unicode字符串

    注意:stringfilepath="C:\\ProCSharp\\First.cs"<=> stringfilepath=@"C:\ProCSharp\First.cs"

    @后面表示所有字符都看作是原来的含义,同时也可以包含换行符。

    9.流控制:(1)条件语句:if(condition){statement(s);},else{statement(s);}

    if(condition1){statement(s);},else if(condition2) {statement(s);}...elseif(condition N) {statement(s);} statement(s);

    switch(condition){casecondition1:statement(s);break;casecondition2:statement(s);break;...default:statement(s);break;}

    注意:case的值必须是常量表达式,不允许使用变量。运行时它禁止所有失败的条件。只有当使用goto语句特别标记要激活的后面case子句,才会允许继续执行,同时标记没有break的每个case子句为错误。解决方案:令一个case子句为空,就可以从这个case跳到下一个case,这样就不需要用goto语句来跳转子句产生非逻辑错误了。值相同的不同常量所表示的case不能使用,但不同值的常量的case的排放顺序是无关紧要的。switch...case语句的另一个作用在于可以用字符串测试变量。

    (2)循环语句:for循环:for(inti=0;i<100;i++){...}

    嵌套的for循环用于矩形多维数组中遍历每个元素,最外部的循环遍历每一行,内部循环遍历某行上的每一列。每次迭代外部循环时,内部循环要彻底执行完毕。for(inti=0;i<100;i+=10){for(intj=i;j<i+10;j++){...}...}

    while循环:while(condition)statement(s);先判断循环条件,后执行循环。

    do...while循环:do{...}while(condition);先执行至少一次循环,后判断循环条件。

    foreach循环:迭代集合总的每一项.foreach(inttemp in arrayOfInts){...}

    注意:不能改变集合中各项的值(temp)。

    (3)跳转语句:goto语句:不能跳转到像for循环这样的代码块中,也不能跳出类的范围,不能退出异常处理try...catch后面的finally块。在switch...case语句之间跳转使用goto语句相当方便,其他情况下goto语句不受欢迎。

    break语句:退出各种循环,循环结束后就执行后面的语句。若放在嵌套的语句中,则执行最内部循环后面的语句。若放在switch语句或循环外部则编译错误。

    continue语句:必须在各种循环中使用,只从循环的当前迭代中退出,然后从下一次迭代开始重新执行,而不是退出循环。

    return语句:退出类的方法,把控制返回方法的调用者,若有方法返回值,则返回这个类型的值。

    10.枚举:publicenumTimeOfDay{Morning=0,Afternoon=1,Evening=2},枚举可以调用方法执行有用的任务。例如:TimeOfDaytime=TimeOfDay.Afternoon;Console.WriteLine(time.ToString());

    从字符串获取枚举值方法:TimeOfDaytime2=(TimeOfDay)Enum.Parse(typeof(TimeOfDay),"afternoon",true);Console.WriteLine((int)time2);

    注意:第一个参数:要使用枚举的类型:typeof(枚举类名),第二个参数要使用的字符串,第三个参数是bool指定在转换时是否忽略大小写?Enum.Parse()实际上返回一个对象引用,把这个字符串显式转换为需要的枚举类型。

    11.数组:数组类型 []数组名

    初始化数组:int[]integers=new int[32];注意:数组总是引用类型,无论它各个元素是不是值类型。

    访问数组元素:integers[0]=32;表示第1个数组元素值是32.

    动态分配数组内存位置:int[]integers;integers =newint[32];首先不进行初始化,创建一个空引用,然后用new关键字把这个引用指向请求动态分配的内存位置。

    查看数组包含多少元素:intnumElements=integers.Length;

    12.命名空间:namespacexx{class yy} <=> xx.yy

    注意:命名空间与程序集无关。不允许在另一个嵌套命名空间中声明多部分的命名空间。

    13.using语句:便于使用其他命名空间中的类。

    命名空间别名:using别名aa=xx; 使用别名实例化一个xx对象x1:aa::xx x1=new aa::xx();

    14.Main()方法:主程序入口必须是类或结构的静态方法static,且返回类型必须是int或void

    public static intMain(){...} 或 public static void Main(){...} 或 public static intMain(string[] args){...}

    编译多个Main()方法使其成了主程序入口点:使用/main,即:cscxx.cs/main:所属类的全名

    15.编译C#文件:/t:exe控制台应用程序(默认)、/t:library 带有清单的类库dll、/t:module 没有清单的组件、/t:winexeWindows应用程序(没有控制台窗口) /out输出的C#文件名、/reference或/r(程序集的路径和文件名),在未引用的程序集中引用类型。

    16.控制台I/O:Console.Write()指定值写入控制台、Console.WriteLine()输出结果最后添加一个换行符

    格式化输出:int i=10;intj=20;Console.WriteLine("{0}+{1}={2}",i,j,i+j);{0}{1}{2}分别表示第1,第2,第3个参数。也可以指定宽度w:{n,w}表示第n-1个参数的值宽度是w,调整文本在该宽度中的位置,正值表示右对齐,负值表示左对齐。如-{0,2}左对齐的第一个参数的值的宽度是2

    预定义类型格式字符串:C-本地货币格式 D -十进制格式(给定精度说明符则加上前导符0) E-科学计数法(指数),格式字符串的大小写(e,E)确定指数符号的大小写  F-固定点格式,精度说明符设置为小数位数,可以为0. G -普通格式(使用E,F格式取决于哪种格式更简单)N-数字格式(用逗号表示千分符)P -百分数格式 X -16进制数格式(精度说明符用于加上前导符0),例如:C2表示两位小数的货币单位。

    17.注释://单行注释 “”

    XML文挡注释说明:///<c>把行中的文本标记为代码</c><code>把多行标记为代码</code><example>标记为一个代码实例</example><exception>说明一个异常类</exception><include>包含其他文挡说明文件的注释行i</include><list>把列表插入到文挡说明中</list><param>标记方法的参数</param><paramref>表示一个单词是方法的参数</paramref><permission>说明对成员的访问</permission><remarks>给成员添加描述</remarks><returns>说明方法的返回值</returns><see>提供对另一个参数的交叉引用</see><seealso>提供描述中的“参见”部分</seealso><summary>提供类型或成员的简短小节</summary><value>描述属性</value>

    编译为程序集生成XML文挡说明:csc /t:library/doc:xx.xml xx.cs

    生成xx.xml文挡说明:<?xmlversion="1.0"?><doc><assembly><name>xx</name></assembly><members><membername="T:命名空间的类名"><summary>...</summary><returns>...</returns><paramname="aa"></param></members>其中“T:”表示这是个类型,“F:”表示这是个字段,“M:”表示这是个成员

     

    18.C#预处理器命令:

    #define DEBUG定义符号DEBUG,这个符号不是实际代码的一部分,而只在编译器编译代码时存在。

    #undef DEBUG删除符号的定义。若符号不存在,#undef没有任何作用。若符号存在,则#define也不起作用。必须把#define和#undef命令放在C#源代码开头,在声明要编译的任何对象的代码之前。

    #if #elif #else#endif条件编译(先检查符号是否存在,若存在只编译#if块中的代码,否则会忽略所有的代码直到遇到匹配的#endif指令为止)

    #warning #error警告和报错编译(使用#error可以检查#define语句是否做错什么事,而使用#warning可以让自己想起做过什么事)

    #region #endregion把一段代码标记为给定名称的一块

    #line可用于改变编译器在警告和错误信息中显示的文件名和行号信息。#line default可以把行号恢复为默认的行号

    #pragma抑制或恢复指定的编译警告,可在类或方法上执行,对抑制什么警告和抑制时间进行更精确的控制

  • 相关阅读:
    WPF Caliburn 学习笔记(五)HelloCaliburn
    MSDN 教程短片 WPF 20(绑定3ObjectDataProvider)
    MSDN 教程短片 WPF 23(3D动画)
    比赛总结一
    HDU3686 Traffic Real Time Query System
    HDU3954 Level up
    EOJ382 Match Maker
    UESTC1565 Smart Typist
    HDU3578 Greedy Tino
    ZOJ1975 The Sierpinski Fractal
  • 原文地址:https://www.cnblogs.com/5tao/p/1854560.html
Copyright © 2011-2022 走看看