C# 知识汇总(一)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一 、语句

1、是构造所有C#程序的过程构造块。可声明局部变量或常数,调用方法,创建对象或将值赋予变量、属性或字段

Const int i=4;

String str=””;

for(int i=0;i<10;i++)

Program pg=new Program();

Pg.Demo(str);                                             

2,用大括号括起来的一系列语句构成代码块,在代码块中声明的变量或常数只可以用于同一代码块中的语句(例如一个方法的形参)

Public string Demo(string s)

{

     S+= AAA “;

}

3、语句分类:

1)条件语句:根据某个条件是否为true来将程序控制权移交给指定的流

  If(){}……else{} 每次只有两个分支

int a = 9;

            int b = 7;

            if (a > b)

            {

                Console.WriteLine("a>b");

                Console.WriteLine(a+">"+b);

            }

            else if (a < b)

            {

                Console.WriteLine("a<b");

                Console.WriteLine(a + "<" + b);

            }

            else if (a == b)

            {

                Console.WriteLine("a=b");

                Console.WriteLine(a + "=" + b);

            }

            else

            {

                Console.WriteLine(" 无法比较" );

            }

swicth(变量) 根据变量可取的的某几个特定的值进行分支

      int grade=89;

            switch (grade / 10)

            {

                case 10:

                    Console.WriteLine(" 你做的非常好,得了100" );

                    break;

                case 9:

                    Console.WriteLine(" 优秀" );

                    break;

                case 8:

                    Console.WriteLine(" 良好" );

                    break;

                case 7:

                    Console.WriteLine(" 中等" );

                    break;

                case 6:

                    Console.WriteLine(" 及格" );

                    break;

                default :

                    Console.WriteLine(" 不及格" );

                    break;

            }

2)循环语句

通过使用迭代语句可以创建循环。迭代语句导致嵌入语句根据循环终止条件多次执行。除非遇到跳转语句,否则这些语句将按顺序执行。

While(条件为真)

{

   执行操作

}

Do

{

    执行语句;

 

}while(条件是否为真)

For(int i=0;i<常值;i++)//是针对知道循环次数的循环

{

    执行操作(可读可改)

}

Foreach(var v  in 集合或数组名)

{

   只能对其进行读取,而不能做其他修改方面的操作

}

3跳转语句

 Break 跳出所有循环

 Continue 跳出本次循环

Goto 跳到某个标志位

static void <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Main(string[] args)

 {

       goto Mark;

       Console.WriteLine("第一行");

     Mark:

       Console.WriteLine("第二行");

   }

Return 返回 下面的代码不执行(对以后的代码实现屏蔽作用

 Throw  抛出异常,之后的代码不再执行,转到catch 捕获此异常

4)异常处理语句

C# 为处理在程序执行期间可能出现的反常情况(称作异常)提供内置支持。这些异常由正常控制流之外的代码处理。

可以组织搭配的几种可行情况:

Try ……catch

Try…….finally

Try …….catch…..finally

其中catch 可以有多个,且范围由小到大排列

5)check 和unchecked常用于对×××算数运算和转换显示启用和取消溢出检查

二 结构

1、结构是一种自定义类型,且是一种值类型,通常用来封装小型相关变量组,new出的对象具有值类型的特性

2、由于结构不使用引用,因此结构没有标识;无法区分具有相同数据的两个值类型实例。

3、所有的值类型都继承自ValueType,所有的引用类型都继承自Object

4、结构的特点:

      结构是值类型,而类是引用类型。
       与类不同,结构的实例化可以不使用 new 运算符。

struct MyStr

    {

        public int i;

    }

 

MyStr ms1=new MyStr();

 

MyStr ms2;

ms2.i=10;

 

 

        结构可以声明构造函数,但它们必须带参数。

       一个结构不能从另一个结构或类继承,而且不能作为一个类的基类。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。      结构可以实现接口。     结构可用作可为 null 的类型,因而可向其赋 null 值。         成员的访问修饰符可是private,public但不可以是protected因为结构不能继承       结构可以包含构造函数(有惨),常量。字段,方法,属性,索引器,事件 和嵌套类     其中的普通字段,如有构造函数,则必须在构造函数中初始化。如没有,字段会自动初始化         静态字段,常量字段不需要自构造函数中初始化,       在结构中,静态字段和常量用结构名调用      普通方法实例化后调用

      静态方法用结构名调用

三、枚举

 

1。用enum声明;是一种由一组称为枚举数列表的命名常量组成的独特类型

Menu是枚举类型

每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。

枚举本质

internal struct Menu:System.Enum

{

public const Menu 文件=(Menu)1;

public const Menu 编辑=(Menu)2;

public const Menu 视图=(Menu)4;

Public Int32 value_;

}

每个枚举对象,都是一个结构的对象

 

属性枚举(位标志)

将 System.FlagsAttribute 应用于某个枚举时,该枚举就包含一些使用按位“或”运算组合的元素。

                                           

 [Flags]

        enum Menu

        {

            文件=1,

            编辑=2,

            视图=4       

        }

 

 Menu m = Menu.编辑|Menu .文件;

 Console.WriteLine(m);

 

----------------------------------

   //==若未启用位标记,如果 value 等于某个已命名的枚举常数,则返回该常数或常数组合的名称;否则返回 value 的等效十进制数

           //FlagsAttribute 自定义属性应用于枚举(以启用了位标记[Flags],且value的值必须是按这种有规律分部赋值的)

              //Console.WriteLine(Enum.Format(typeof(Days), 56, "G"));

            //以十六进制形式表示 value(不带前导“0x”)  不管有没有设位标记

              //Console.WriteLine(Enum.Format(typeof(Days), 4, "X"));

            // 和“G”或“g”执行的行为是相同的,如果使用“F”或“f”只是在 Enum 声明中不需要 FlagsAttribute。

            //还需有规律分部value值=========返回是已命名的枚举常数的组合或单个常数 或 value的等效十进制数

              //Console.WriteLine(Enum.Format(typeof(Days), 56, "F"));

            //以十进制形式表示 value。

              //Console.WriteLine(Enum.Format(typeof(Days), 4, "D"));

 

            //返回具有指定值的常数的名称(位标记在此无用),若不存在 什么也不输出

           //Console.WriteLine(Enum.GetName(typeof(Days),16));

            //得到string类型的数组 ====Enum .GetNames(typeof(Days))

            foreach(string v in Enum .GetNames(typeof(Days)))

            {

               Console.WriteLine(v);

            }

 

---------------------------

  //返回指定枚举的基础类型   System.Int32

            Console.WriteLine(Enum.GetUnderlyingType (typeof(Days)));

            //检索指定枚举中常数值的数组

            foreach (var c in Enum.GetValues(typeof(Days)))

            {

                Console.WriteLine(c);

            }

 

            //getNmae GetValues 输出一致

 

            //是否存在具有指定值的常数指示

            Console.WriteLine(Enum.IsDefined(typeof (Days ),3));

            //周一对应的数字

            Console.WriteLine((int)Enum .Parse (typeof (Days ),"周一"));

            Console.WriteLine((int)(Days )Enum.Parse(typeof(Days), "周一"));

            //直接输出周一

            Console.WriteLine((Days)Enum.Parse(typeof(Days), "周一"));

            Console.WriteLine(Enum.Parse(typeof(Days), "周一"));

            //得到数值对应的枚举常数的组和

            Console.WriteLine(Enum.ToObject(typeof (Days ),3));