1.C#值类型和引用类型的区别
1.分配存储不同:
值类型的数据存储在内存的栈上且(栈的内存分配是自动分配);引用类型的数据存放在内存的堆中(堆在.Net中会有GC来释放);
值类型变量存放的是实际数据,引用类型存放的是实际数据的地址;
2.速度:
值类型存取速度快,引用类型存取速度慢;
3.继承不同:
值类型继承自value Type,valueType继承自System.Object;引用类型直接继承自System.Object;
4.属性不同:
值类型是密封的,不能作为基类;引用类型一般具有继承性;
5.参数传递上不同:
值类型作为参数传递时,不影响本身;引用类型作为参数时,会改变最终变量的值。
6.
C#的值类型包括:结构体,枚举,可空类型;
C#的引用类型包括:数组,用户定义的类,接口,委托,object,字符串
2.静态常量Const和动态常量ReadOnly的区别
Const:
1.在编译期间进行初始化;
2.初始化之后,就不能再进行数据的改动,即显示静态常量不能修改的特点;
3.定义时有限制,每个类的实例,静态常量值都一样;
4.编译期间不分配内存;
5.静态常量也不能通过构造函数修改,只能通过初始化器;
6.可以出现在类和方法中;
ReadOnly:
1.在运行期间初始化;
2.定义期间不能初始化,可以在构造函数中初始化,与const相反;
3.定义时无限制,对于类的不同实例,动态常量可以不一样;
4.运行期间分配内存;
5.只能出现在类中,不能出现在方法里;
3.委托delegate和事件event的区别
1.委托(Delegate): 是 存有 对某个方法的引用 的一种引用类型变量 :将方法以变量的形式传递,并且以方法的形式执行,是类,是引用类型。
2.事件:功能被限制的一个委托变量。它的类型是委托类型;
3.委托的三种形式:
delegata:四步(声明,实例化。注册方法,调用)
Action:添加的方法不能有返回值;
Func:添加的方法要有返回值;
lambda表达式:方法只能使用一次。
4.委托可以在外部被其他对象调用,而且可以有返回值。而事件只能在声明事件的类内部调用。
4. 抽象类和接口的区别
接口和抽象类比较像,都是等着其他类来现实接口或类;
当只有少数方法时,使用抽象类即可;
当有大量方法时,建议使用接口;
接口本身并不实现任何功能,它只是和声明实现该接口的对象订立了一个必须实现哪些行为的契约;
抽象类不能实例化,但是允许派生出具体,具有实际功能的类;
接口之间是可以继承与被继承的;
接口继承之后,需要实现接口,因此接口实现方法名称需要其方法名一样;
//------------------------------------------------------------------------------------------------
相同点:
1.都可以被继承
2.都不能被实例化
3.都可以包含方法声明
4.派生类必须实现未实现的方法
不同点:
1.抽象类可以定义字段,属性,方法实现;接口可以定义属性,索引器,事件,和方法声明,不能定义字段;
2.抽象类是一个不完整的类,需要进一步细化,而接口是一种行为规范。本身并不实现任何功能;抽象时允许派生出类的。
3.接口可以被多重实现,抽象类只能被单一继承。
4.抽象类更多的是定义在一系列紧密相关的类间;而接口大多数是关系疏松但都实现某一功能的类中;
5.抽象类是从一系列的相关对象中抽象出来的,因此反映的事务的内部共性;而接口是为了满足外部调用而定义的一个功能约定,因此反映的是外部特性。
6.接口可以支持回调,而继承不具备这个特点;
7.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象类方法而不必实现,而在抽象类的子类中实现接口的方法。
5.抽象类abstart与虚方法virtual的区别
1.虚方法(virtual)必须有方法体,抽象方法没有方法体;抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化;
2.抽象方法只能在抽象类中,虚方法不是;
3.抽象方法必然在派生类中重写,这一地点和接口类似,虚方法不需要在派生类中重写。
简单说:抽象方法是需要子类去实现的,而虚方法已经实现,可以被子类覆盖,也可以不被覆盖,取决于需求。都可为派生类提供重写;
6.线程的Sleep()方法和wait()方法的区别
1.sleep()方法是Thread类中的方法,而Wait()是object中的方法;
2.Sleep()方法不会释放lock,但是wait()方法会,而且会加入到等待队列中;
3.Sleep()方法不依赖于同步器sunchronized(),但是wait()方法需要;
4.线程调用Sleep()方法后不需要被唤醒(休眠时开始阻塞,线程的监控状态依然保持,当指定的休眠时间到了会自动恢复运行状态,但是wait()方法需要被唤醒);但是wait()方法需要被重新唤醒;
5.wait()只能在同步方法或同步控制块中使用,而sleep可以在任何地方使用;
7.Tcp和Udp的区别
1.连接机制:
Tcp:是一种面向连接的,可靠的,基于字节流的传输通信协议;
Udp:不需要连接;
2.服务对象:
TCP:是一对一的两点服务;
UDP:支持一点一,一对多,多对多;
3.可靠性:
TCP:无论网络连接如何变化,TCp都可以保证数据不丢失,不重复,能够到达接收端;
UDP:是尽最大努力交付数据;
4.拥塞控制,流量控制
TCP:有拥塞控制和流量控制机制;
UDP:没有拥塞控制和流量控制机制;
5.首部报文分析:
TCP:首部较大为 20 字节;
UDP: UDP 只有 8 字节;