1.能够发生类型转换的类型之间才能够强制类型转换
比如 int , double ,short , char 这些类型的本质都是一样的,都是数字可以强制类型转换
但是 int 和 string 之间就不可能转换,毕竟数字的本质依然是数字,他无论如何也不可能变成一个字符串,字符也同理
子类和父类也是这种关系,子类包含父类,所以子类可以强转为父类,但是父类没有子类的一些数据,无论怎么转也转不成子类的
2.如何快速调出小灯泡来辅助我们修改代码呢?
按住alt + 回车就能快速调出小灯泡辅助我们修改代码
1.什么是线程呢?
一.在很早以前的计算机的运行方式是用户输入一个指令然后计算机执行一个指令,这种运行方式的效率是很低的,因为计算机的大部分时间不是在运行指令而是在等待指令输入
二.为了提高计算机的编译效率,人们开发出了批处理操作系统 --- 这个批处理操作系统就是指:把一系列需要进行操作的指令写下来,形成一个指令执行清单,然后再把这个清单交给计算机执行,这样的话就能够节省大量的等待时间,提高计算器的运行效率
三.后来人们计算机的运行效率要求越来越高,希望通过改进批处理操作系统的方式来提高效率,而阻碍批处理操作系统的效率提升的最大瓶颈就是 ---- 在批处理操作系统下,内存中只能存在一个程序,计算机只能处理一个程序
四.基于第三点中的瓶颈提出一个问题,我们是否能在内存中存储多个程序呢?答案是可以的,人们基于原本的单道批处理系统(内存中只能存储一个程序)开发出了功能更加强大的多道批处理处理系统。
在多道批处理系统中,计算机的内存被划分为了很多区域,每个区域都可以存储一个程序,当程序在这个区域中运行起来的时候,我们称这个区域为进程
五.在一个进程中也存在和计算机一样的运行效率问题
当一个进程(运行的程序中)要处理多个子任务时,如果按照一个任务处理完才能够去处理另一个任务的逻辑的话,程序的运行效率较低(参考单道批处理系统),为此人们参考多道批处理系统为进程开发出了线程。
每一个进程要处理的子任务都是一个线程,一个线程可以随时被中止和开启,且在执行一个线程的时候我们可以随时跳转去执行另一个线程
一个进程中至少要有一个线程,必须存在的线程叫做主线程。
当一个进程中有大于1个线程的时候,我们就称这个进程为多线程程序
1.我们的Main函数(方法)就是在主线程中运行的
2.在c#中,线程被封装为了一个类 -- Thread,我们可以通过这个类实例化一个线程对象
3.线程就相当于工厂中的一条生产线,而进程就相当于工厂
4.线程的作用就是让计算机能够同时干多件事,比如在工厂中设置多条不同的生产线,那么这个工厂就可以同时生产不同的产品
5.一个线程只能干一件事,如果我们想让计算机同时干多件事的话就需要我们设置多个线程
在执行程序的时候如果我们只有一个线程的话,那我们只能处理一个任务,但是当我们在一个线程(主线程)中处理一个任务时创建一个新的线程(子线程)的话,我们就可以在主线程处理自己的任务的同时,让子线程去处理新的任务,这时我们就可以在一个程序中同时处理多个任务了
6.一般来说在开出来的子线程中执行的程序都是某个方法(函数),创建子线程的流程;
一.创建一个在子线程中执行的静态方法(函数)
二.创建一个TheadStart对象来接收线程启动时要运行的静态方法
要将静态方法的函数名写在圆括号中 --- 这里其实运用了委托技术将函数作为参数传给了对象
三.在主线程中创建一个一个子线程,并将创建的 TheadStart对象 传给子线程
当然二,三步也可以直接两步并作一步来写
四.在主线程中启动子线程
调用子线程的start方法
7.在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。
8.多线程的时候,线程之间的运行顺序从宏观角度来讲是并发的(即同时进行的),但这是一种假并发,从微观的角度的来看Cpu在一定时间里依然只是执行一个线程,只不过此时Cpu采用的是时间片方式执行线程 --- 所谓的时间片就是我们设定每10毫秒就是一个时间片段,Cpu每执行一个线程一个时间片段就会结束这个进程去执行另一个进程,就这样执行了所有的进程之后再开始一轮进程执行循环,这种方式就称为时间片管理
由于CPU执行一个线程后切换另一个线程的时间很短,短到从宏观角度上来看可以忽略这个切换时间,此时我们就可以认为两个线程是并发(同时)执行的(但这只是一种假并发)
(多核真并发 --- 一个CPU一定时间内只能处理一个线程,那么我直接给电脑装多个CPU,让多个线程同时在不同的CPU上运行,这样的话不就是真并发了吗)
参考杀老师多线程辅导教学
9.在游戏开发中线程是必须的一个技术,比如我们在我们要在一个程序中同时实现音乐的播放,动画的播放,图形的变化等等任务,这就需要我们使用多线程技术来实现多任务并发进行
10.不同的线程之间尽量避免同时使用共同的资源(比如共同调用同一个函数),不然的话就会出现争抢资源的现象
11.除了让线程开始和停止的命令外,我们还有一个折中的休眠方法,通过调用这个休眠方法我们可以让线程在停止一定时间后重新执行
括号内传的参数是休眠的时间(以毫秒为单位,1s秒等于1000ms毫秒)
在那个线程中按照语法调用上面的sleep方法,那个线程就会执行休眠操作
12.当主线程执行完后,程序就会结束,而主线程中执行的方法就是main方法
有时会出现这种情况 --- 主线程中的main方法已经执行完了,但是主线程还没有结束
这时多半是因为还有子线程在执行,当还有子线程在执行的时候主线程会等待子线程执行完毕再结束
13.线程的终止有两种方法:
一.线程执行完毕后自动终止
二.调用abort(终止)方法来手动终止线程 --- 语法:线程名.Abort( )
13.静态变量和静态方法是被所有线程公用的 ,线程中只能够执行静态方法,然后只能够访问和操作的函数外变量只有处于同一个类的静态变量(静态函数中可以自己创建变量)