整理和记忆一部分学习过程中的基础知识
类型
C# 是强类型静态语言,每一个变量具有类型,描述这个变量占内存空间大小。
变量的类型,决定了:
-
变量存储时所需的内存空间大小
-
变量的最大值、最小值,也就是取值范围
-
这个类型所包含的一些默认成员方法 GetProperties() GetMethods() string.Empty
-
这个类型由哪个基类派生
-
程序运行时,变量在内存中的分配位置,堆区还是栈区。
一般而言,堆区存放对象实例,堆空间比较大、读写慢;
栈区存放函数上下文,栈空间比较小、读写快 -
这个类型允许的一些操作 + - += -=
获取基本类型
Type t = typeof(num1)
使用反射时会更多的用到 Type 类
引用类型
类(对象)、接口、委托、数组、字符串
引用类型的变量,保存的是它所引用的对象在堆区的起始地址,这个对象内部的成员属性,也是存放在堆区。
值类型
原始类型(byte int short long char double bool 等等)、结构体struct、枚举enum
基本数据类型
object string 等等 又叫已定义数据类型、内置数据类型、基本数据类型
自定义数据类型常用的关键字
class interface delegate struct enum
这些关键字就是让程序员可以自定义 类、接口、委托、结构体、枚举
装箱
用一个对象实例后,得到的变量,将栈中的值变量,保存到堆中的某一地址的内存中
System.Object obj=i;
拆箱
将堆中某个对象实例后,得到变量的内容,转换为栈中的某个类型的值变量
int j=(int)obj;
数值类型的取值范围
整数 int 范围在 [-2147483648,2147483647] int.MaxValue
双精度 double 范围在 [-1.7976931348623157E+308,1.7976931348623157E+308]
十进制数 decimal 范围在 [-79228162514264337593543950335,79228162514264337593543950335]
访问修饰符
不写时,默认是私有 private
static 表示这个成员属于类,而不是类的实例,所以可以通过 类名 . 成员 访问,而不是通过 类实例 . 成员 访问
方法
方法的签名,即方法名 + 括号内的形式参数类型
方法调用时,可以使用位置自变量或者命名自变量或者一起用
命名自变量就是可以改变传参顺序,如下
public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }
moto.Drive(speed: 60, miles: 170);
写自定义构造器时不像C++语言,c#直接写 public MyClassName(){get;set;}
类型转换
隐式
子类向父类转换后,父类不能再访问子类特有的成员
显式
object myobj;
Book mybook = myobj as Book;
StoryBook myStoryBook = (Book)mybook;
语句
int x =1;
这叫1个声明语句,包含了初始化器
int x;x=1;
这叫声明变量后,为变量赋值(初始化器),算2个语句
类
类的默认访问级别是 internal
,在当前程序集下的命名空间和类的派生类中有效
类是单继承的
子类的访问级别不能超过父类
seal
修饰的类不能作为基类
protected
限制了类的成员只能被同一继承链的派生类访问
类方法的重载
基类中该方法用 virtual 修饰,派生类中该方法用 override 修饰
派生类调用基类的某个构造函数时,通过 base 关键字调用指定父类的构造函数
//这是 Apple 类的第二个构造函数。
//它使用“base”关键字指定
//要调用哪个父构造函数。
public Apple(string newColor) : base(newColor)
{
//请注意,该构造函数不会设置 color,
//因为基构造函数会设置作为参数
//传递的 color。
Debug.Log("2nd Apple Constructor Called");
}
成员隐藏
在派生类中使用 new 关键字修饰与基类同名的方法,就能隐藏掉基类同名的方法。(如果不隐藏,则派生类会调用到基类的同名方法)
其他
线程等待 1 秒 Thread.Sleep(1000);