C#学习总结七

本文深入探讨了信息技术领域的核心概念、技术应用及实践案例,包括但不限于前端开发、后端开发、移动开发、游戏开发、大数据开发、开发工具等多个方面。文章详细介绍了各领域的关键技术和工具,以及如何在实际项目中运用这些技术解决问题。此外,还涉及了嵌入式硬件、电路知识、AI音视频处理、测试、基础运维等细分技术领域,旨在为读者提供全面的技术知识框架和实践指导。
摘要由CSDN通过智能技术生成





**************序列化和映射************
1.序列化只能保持一个对象
2.序列化可以保存任何类型的数据


2.程序集
dll  //程序集的封装
exe  // 应用程序的程序集
3.程序集是一个项目,
***************反射*******************
1.有了反射可以对每个类型了如指掌
2.反射相当于反编译(将打包的程序集拆开)
3.一个解决方案中的每个程序集(项目)的 Assembly .GetExecutingAssembly(  ).Location 是不一样的
4.序列化中
a.A类中有B类成员,当A类序列化时,B类也要标注为可序列化
b.一个解决方案中,如果A项目要引用B项目的类,除了在A中添加B的引用之外,还要将B中的类设置为Public //因为默认类是internal 的,只能在项目的内部访问
5.序列化可视为一个临时的数据库
6.网络中只能传输二进制文件
7.反射的用途
a.在使用第三方插件时(第三方插件可以是C#以外的语言)可以使用反射
b.反射可以让C#使用其他语言的类库,Dll中各种成员


******************多线程**************
1.使用线程可以不用手动(自动)执行进程
2.任务管理器中的所有进程叫做应用程序域
3.窗体销毁的时候只有销毁窗体中的控件,而后台运行的多线程不会终止,要强行终止(关闭) ,否则程序的整个进程还在后台运行
4.委托就是函数指针
5.程序是由线程来运行的/或者手动运行的
6.thread. Join()禁用,但是不关闭线程
7.阻止是另一个线程去阻止当前线程,暂停是自身暂停
8.不允许线程在执行的时候调用修改窗体的控件
9.线程在与进行中必须抛出异常,无论是否有异常、
10. Load...方法是窗体的主线程
11.线程所执行的程序结束,则该线程也结束
12.Abort( )//线程结束后,该线程的生命期结束,不能使用start( )来重启
13.Thread.sleep( 100) //是将当前线程sleep,其实就是sleep当前线程执行的时间
14.
a.多线程只能控制窗体中已有的控件
b.单线程可以创建控件
c.time控件是单线程的,可以用来创建控件,但是只能开始和停止(而且一个窗体中最好只创建一个time控件)
d.thread是多线程(哪怕只是创建一个实例)-->可以暂停核开始,而且不能用于创建控件,且只能操作已有的控件
e.thread所调用的函数中可以关闭自己
f.单线程是前台界面,多线程是后台(调用的时候,断点只能调用当前的线程,其他线程任然在运行)


**********************网络编程**********************
1.
a.Tcp是点对点的协议(两台计算机之间)
b.UDP是广播形式的,只要在该网段的都可以接收到-->只负责发送
c.80---->是网页默认的端口
d.    streamReader  sr=new  streamReader(stream,Encoding.default )  //可以再读取流的时,设置编码


2.Net.Sockets
a.以后再做具体应用的时候,端口设置为10000以上,防止冲突,一个软件一个端口
b.监听是针对本机的


3.方法参数的值总结:一般要么是枚举,结构,要么是要new一个类的实例
a.  "." 是枚举/结构
b.  new 类的实例


4.窗体自身有个线程,有的子对话款打开时,整个窗体线程会暂停,如果想绕过该过程继续执行窗体,可

以给该过程一个线程


5.
Listen--->侦听器就是本机的数据接收端
TcpClient---->是发送端的数据包


6.多线程的好处:
如果 A--->B--->C  
程序的流程被B中断,而且B是无限循环的,可以让B在一个thread中自主执行,这样B就可以运行,且A可
以继续向下运行到C


7.几乎所有的读写操作(无论个各种格式,网络传输)步骤:
a.根据Url 路径等创建stream
b.用stream来创建读写器


8.个种流两种老公格式
a.二进制(无所谓编码)
b.字节形式(utf8,AscII码)
9.创建listen时,可以直接写port号,也可以ip+port,但是ip一定是本机的hostIp
10 关闭线程,流--->要反顺序关闭
11.server和client 发和收的数据字节大小要一致
12. Netstream中要是发送的数据不是一次性发送或者接受完毕,而是分包进行的话,要while中循环接收/发送
13.一般不会直接用stream读写
a.文件的用单个字节+code方式来操作
b.文本以外的文件使用二进制读写(且读写的编码要一致)
14.Socket就是远端节点
14.Invoke可以用委托将控件加入指定窗体的线程中执行(包括创建和编辑)
15.   utf8和gb28的编码不一样
16.   网络上只能传输一个字节为单位的数据(包括:二进制的字节,带code编码的流)


*********************三国杀项目总结*********************
1.一个Netstream可以被侦听端和接收端同时使用
2. Netstream 是分包发送和接收的,所以要在接收端用 Netstream.DataAvailable来判断是否还有数据
(且用while循环来接收被打成多个包的数据)
3.socket中包括发送和接收两个端口的信息
4.发送的信息过一段时间,如果无端口接收的话,就会丢失
5.在一个窗体的引发的多线程中,不能添加和创建(包括往该窗体添加和独立创建控件和窗体-->都不可
以),解决方法:
     delegate void EventHandler( ) //
     public  void  Thread( ) //引发的线程object[  ]
     this.invoke( new EventHandler(work)) // 用委托实例化一个方法work,在work中对另一个线程中窗口进行编辑/创建


6.
a.   Socket被创建后也是一个实例,socket可以被block和close(如果colse则所有相关的资源都将被释
放)
b.   socket(包括本地local和远端Remote 信息)
c.  使用socket创建的流既可以用于写,也可以用于读(无论socket中是否含有监听端口),但是用相同的socket不要重复创建Networkstream-->就如两点间只能有一条直线一样
e. 要是Netstream的两个端口中的一个关闭,则该netstream也将关闭
f.  一个Netstream的两端
  A------------B   
A和B不能同时写数据,虽然这样的几率很小,最好如下所示进行操作
  A------------B
  B------------A  //同时创建两条数据流,就不会冲突了


g. 但是不能再两个线程(进程中)使用相同的端口来进行监听,一个端口某一个时刻只能被一个线程用
来监听(作为listen端口)
h.  在侦听的线程循环方法中:
    while(  )
  {
    socket=listen.AcceptSocket(  )  //只有在接收到连接申请的时候才会向下顺序执行,否则就一直阻塞在此---->直到有新的连接申请发生
  }


i.  Netstream  ,Tcp方式的发包是有延时的,但是如果接收方在限定的时间内没有接收,则该包丢失




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值