【Unity|C#】C#基础总结

拈花ヽ惹草 提交于 2020-01-26 03:53:18

【学习资料】

        > 在线文档

            官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/

            菜鸟教程:https://www.runoob.com/csharp/csharp-tutorial.html

        > 视频教程

            腾讯学院、Siki学院

 


 

【笔记】

  • 基础语法

    根据学习资料,自学学习。

 

  • 标识符命名

    • 标识符必须以 字母下划线(_) 或 @ 开头,后面可以跟一系列的 字母、数字(0-9)、下划线(_)、@。

    • 不能使用C#保留的关键字,如 if,但可以为 @if

 

  • 值类型及取值范围

    • 常量前缀指定基数

      • 十进制:没有前缀

      • 十六进制:0x 或 0X 。如:0x10 表示 十进制 16

      • 八进制:0 。如:010 表示 十进制 8

      • 二进制:0b 。如:0b10 表示 十进制 2

    • 常量后缀指定精度(U 和 L 分别表示unsigned和long)

      • u 或 U : 10U    表示 uint

      • l 或 L   : 10L    表示 long

      • LU组合: 10LU 表示 ulong

 

  • 特殊运算符

 

  • 对象类型(object)

    • 所有类型的最终基类(包括值类型、struct、class)都是object。

    • 装箱:将 值类型 转为 object        

    • 拆箱:将 objec t转为 值类型

    • 箱/拆箱会产生一定的消耗,尽量少用。

 

  • 访问修饰符

public 所有对象
private 只有本类的内部函数
protected 本类及子类内部函数
internal 同一程序集(dll)
protected internal 同一程序集(dll),或 其他程序集的子类内部函数

 

  • 可空类型(Nullable、?、??)
    • int? i = 3 等同于 Nullable<int> i = new Nullable<int>(3)

    • int i;   // 默认值为0

    • int? i; // 默认值为null

    • 合并运算符(??):num3 = num1 ?? 5.34;  // num1 如果为空值则返回 5.34

 

  • 数组(Array)

    • 一维数组:int[] numbers = new int[10];

      • 初始化:= new int[]  {1, 2, 3, 4, 5};

      • 初始化:= {1, 2, 3, 4, 5};

    • 二维数组:string[,] names = new string[5, 4];

      • 每行个数固定相同(都是4)

      • 初始化:= { {"a", "b", "c", "d"} , {"e", "f", "g", "h"} };

    • 交错数组:byte[][] scores = new byte[5][]

      • scores[i] = new byte[i + 3]

      • 每行个数可以不同

      • 初始化:= {new int[]{1,2,3} , new int[]{1,2,3,4} };

 

  • 类(class)

    • base : 表示父类对象

    • 父类初始化:在初始化列表里进行

    • C#不支持类的多继承,但可以继承多个接口(interface)

    • sealed:密封类,不能被继承

    • 静态多态性

      • 函数重载(不同参数)

      • public Tabletop(double l, double w) : base(l, w)
        { }
      • 运算符重载

      • public static Box operator +(Box b, Box c)
        { }

    • 动态多态性
      • 抽象类:abstract ,子类中重写函数 override

      • 虚函数:virtual    ,子类中重写函数 override

 


 

【扩展知识】

  • 值类型 、引用类型 、ref

    • 值类型:当形参值改变时,实参值不变;相当于 形参是实参的拷贝,是不同的对象

    • 引用类型:当形参值改变时,实参值也会改变;相当于 形参和实参,指向同一个对象,但形参和实参不是一个变量(类似指针变量)

    • 引用传递ref与“引用类型”区别在于,形参与实参是同一个变量(相当于取个别名)

    • class C    
      {
          public int value = 0;
      }
      // 实参和形参是2个变量,但指向同一个对象
      void changeC1(C c)
      {
          c.value = 10;
          c = new C();
          c.value = 30;
      }
      // ref : 形参是实参的引用,是同一个变量
      void changeC2(ref C c)
      {
          c.value = 10;
          c = new C();
          c.value = 30;
      }
      
      // 调用
      C m_c1 = new C();   //
      C m_c2 = new C();   //
      changeC1(m_c1);     // 结果为 10
      changeC2(ref m_c2); // 结果为 30

 

  • struct 、class

    • 类 是 引用类型,结构体 是 值类型

    • 因此结构体不能=null,也不需要使用new

    • 结构体 不支持继承

    • 结构体 不能声明 默认(无参)构造函数,不能声明 析构函数

    • 结构体成员 不能指定为 abstract、virtual 或 protected

 

  • 抽象函数(abstract) 、虚函数(virtual)

    • abstract:父类只声明没有具体实现,子类必须重写实现父类中的抽象函数

    • virtual:子类可以不重写父类的虚函数

 

  • 抽象类(abstract) 、接口(interface)

    • 抽象类:依然是一个类,不能被实例化,它仍然包含类的函数

    • 接口:相当于是个规则,里面只能有方法、属性、索引、事件

    • 抽象类:有抽象的方法,也有不抽象的方法。子类必须实现父类的抽象方法

    • 接口:继承了接口后,所有的接口方法都必须实现

    • 一个类只能继承一个父类,但是可以实现多个接口

 

  • 二进制表示

      

 

  • 位运算(& | ^ ~ << >>)

    • & 、| 、^ 、~ :符号位参与运算

      • 1 & -1 = 1

      • 1 | -1 = -1

      • 1 ^ -1 = -2

      • -1 ^ -8 = 7 

      • ~1 = -2

      • ~-1 = 0

      • ~-8 = 7

    • << :符号位参与运算;高位丢弃,低位补0

      • -2147483646 << 1 = 4

      • -2147483646 << 29 = 1073741824

      • -2147483646 << 30 = -2147483648

      • -2147483646 << 31 = 0

      • -2147483646 << 32 = -2147483646

      • -2147483646 << 33 = 4

    • >>

      • 有符号:

        • C#   :补符号位(算术右移)

        • C++:各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

      • 无符号:高位补0

      • -1 >> 1 = -1

      • -1 >> 2 = -1

      • -127 >> 1 = -64

      • -127 >> 6 = -2

      • -127 >> 7 = -1

      • -127 >> 8 = -1

      • -127 >> 31 = -1

      • -127 >> 32 = -127

      • -127 >> 33 = -64

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!