C# 知识汇总(一)
一 、语句
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 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));