0316C#基础加强
 ->交换2个变量的值不用方法的方法
   int num1 =10;
   int num2 =20;
  
   int temp = num1;->中间变量交换
   num1 =num2 ;
   num2 =temp;
 ->用方法的交换
 * 方法的语法(static静态方法)
    访问修饰符  返回值类型 方法名(参数)
     {
  //方法体
     }  
ctrl+k+s折叠代码#region,Ctrl+A,Ctrl+k+f将所有代码对齐
*语法规范(一定要记住)
   ->变量命名规则
     骆驼与帕斯卡命名:骆驼首字母小写,连接单词大写;帕斯卡首字母大写;
   -> 注释(//单行注释)(/*多行注释*/)(///文档注释,在方法的前面和类前面)
   ->文件组织规范
*反编译工具使用
*流程控制
*方法(就是函数)([]可以省略)
     如果Main方法中前面的变量,如果在方法中要被使用,通过参数传递进去;
     如果方法结束后,方法中的变量在Main方法中要使用,就需要通过返回值返回;
*Console.WriteLine的用法,有2类
   ->重载的使用
      ->给方法传递不同的参数,就会直接调用方法的重载
   ->直接F12可以看到重载方法
   -> 使用格式化字符串(formatter)
      ->方法带有多个参数,第一个参数才是输出的参数,但是第一个参数中有坑;
   ->从第二格参数开始其后的所有参数均是填坑的
   ->填充的数据应多于坑的个数(序号匹配)
*枚举(是一个类型)
   ->语法(为了方便,不用记住某些值的特定表示,只用记住ConsoleKey.这个东西就可以)
     [访问修饰符] enum 枚举名
  {
    //成员0,
    //成员1,
  }
   ->枚举的使用: 方便程序员编码; 
  枚举名  变量名;
  变量名 = 枚举名.成员;
   ->默认情况下枚举的本质是整数;不要循环赋值;
*结构
    ->语法(不能赋值)
   [访问修饰符] struct 结构名
   {
       public 类型 类型名;
    public 类型 类型名;
   }
    ->两种用法
    ->使用new构造函数 结构名 = new 结构名();当结构成员没有初值的时候,会有一个初始值,数字为0,
    引用类型为null,bool类型为false;结构的构造方法是为了赋初值;
    ->结构名 变量名;
    -> const常量(在定义的时候必须赋初值,常量不允许后期修改)
 ->结构与类的区别:结构是值类型,结构不具备面向对象的特征,结构可以实现接口;
 C#所有类型都来源于Object;
****************************************************************************************************************
*面向对象
   ->语法
     class 类名
  {
     //成员
  }
   ->面向对象的三大特征(封装性、继承性、多态性)
   ->类与对象(类是模型,对象是产品)
   ->类的实例化(必须new)
     类名 变量名 = new 类名();
   ->类在定义的时候构造函数会开辟空间
        ->类的构造函数,用来初始化变量,不用考虑说有的字段
  ->可以考虑带参数与不带参数的重载
   ->而结构在定义的时候不用单独调用构造方法开辟空间
        ->结构的构造方法必须为每一个成员赋初值
  ->在结构中不允许手动添加无参数构造方法
   ->类的构造方法用来开辟空间,创建对象,对对象字段进行初始化
  
   ->关于类的访问修饰符与成员
        ->默认情况类的修饰符为internal,表示内部类,作为类库存在,内部不允许其他项目中的代码进行访问,只能在当前项目中进行访问;
  ->可以在类前面修饰的只有internal和public;
  ->写类就是为了描述对象(特点、功能)
  ->特点就是特征,就是变量,就是字段(字段都设为private)
  ->功能就是方法、属性等(属性不具备存储数据的能力,所有的属性都是起到一个外部访问的目的)
  ->属性就是一个get方法和一个set方法,用字段进行读取和设置值的方法
  ->仅仅是为了使用方便才将属性写成类与字段的样子
     ->属性语法:public int Num
       {
       get{return num;}
       set{num = value;}
       }
     ->如果具备了get、set就是一个可读属性
        ->如果只有set就是一个只写属性
        ->如果只有get就是一个只读属性
  ->下面的情况编译器会自动的生成一个后台的私有字段,来实现属性的访问能力,该字段才存储数据
    ->自动属性的用法很特殊,没有方法体,与直接访问public一样
    ->自动属性必须是可读可写的
      public int Num
    {
    get;
    set;
    }
        ->this表示当前实例