c# 常用区别总结

c#常用的区别总结

抽象类和接口的区别

抽象类

使用abstract关键字(abstract class)

可以包含功能定义和实现

反映的是事物的内部共性

不能被实例化

例:Public abstract class Withdraw

接口

使用interface关键字

只能包含功能定义

因此反映的是事物的外部特性

不能被实例化

例:Public interface  Withdraw

结构和类的区别

结构

是值类型,保存在栈上

对结构中的数据进行操作比对类或对象中的数据进行操作速度要快

一般用结构存储多种类型的数据

当创建一个很多类或对象共用的小型对象时,使用结构效率更高

引用类型,保存在受管制的堆上

抽象方法和虚方法的区别

抽象方法

使用abstract关键字

必须被派生类覆写的方法

可以看成没有实现体的虚方法,是虚方法的一种

例:Public abstract bool Withdraw(…);

虚方法

使用virtual关键字

虚方法可以有实现体

可以在子类中覆盖,也可以不覆盖使用父类的默认实现

例:public virtual bool Withdraw(…);

值类型和引用类型的区别

值类型

值类型的变量直接存放实际的数据

把变量的值保存在堆栈中

引用类型

引用类型的变量存放的则是数据的地址,即对象的引用

把实际数据的地址保存在堆栈中,而实际数据则保存在堆中

堆和堆栈的区别

堆一般用于存储可变长度的数据,如字符串类型

堆栈

用于存储固定长度的数据,如整型类型的数据

Constreadonly的区别

Const

只能在该字段声明中初始化

const 字段是编译时常数

const 默认就是静态的

const 对于引用类型的常数,可能的值只能是 string、值类型和 null

Readonly

可以在声明或构造函数中初始化

根据所使用的构造函数,readonly 字段可能具有不同的值

readonly 字段可用于运行时常数

readonly 如果设置成静态的就必须显示声明

readonly可以是任何类型

对于一个 readonly 的 Reference 类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的

面向过程和面向对象的区别

面向过程

是一种谓语和宾语的关系

面向对象

是一种主语和谓语的关系。特征:封装、继承、多态

类和对象的区别

类是对某一类事物的描述,是抽象的、概念上的 定义。 *面向对象的设计的重点是类的设计。

对象

对象又称作实例,是实际存在的该类事物的每个个体。

==equeals()的区别

==

辨别实质是否相等

equeals()

辨别长相是否相等

              overrideoverload的区别

override

表示重写,用于继承类对基类中虚成员的实现

overload

表示重载,用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现

privateprotectedpublicinternal 修饰符的访问权限的区别

private

私有成员, 在类的内部才可以访问

protected

保护成员,该类内部和继承类中可以访问

public

公共成员,完全公开,没有访问限制

internal

在同一命名空间内可以访问

  DataReaderDataSet的异同

DataReader

始终占用数据连接 在线操作数据库任何对SqlConnection 的操作都会引发DataReader的异常,因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为 DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了

DataSet

则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接,因为DataSet将数据全部加载在内存中.所以比较消耗内存,但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作

  Appplication.Exit Form.Close的区别

Appplication.Exit

退出整个引用程序

Form.Close

关闭指定的Form

  Paramsrefout之间的区别

Params

在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个

Ref

需要显式初始化传递到 ref 参数的参数必须最先初始化。。

属性不是变量,不能作为 ref 参数传递

Out

不必初始化作为out参数传递变量,必须在方法返回之前为 out 参数赋值属性不是变量,不能作为 out 参数传递

  Finalize()和Dispose()之间的区别

Finalize()

用于隐式释放资源,相当于C++中的析构函数

Dispose()

用于显示释放资源

  做强签名的assembly与不做强签名的assembly有什么不同

强签名的程序集

可以做成com 可以安装到gac中

不做强签名的程序集

不能做出com,不能安装到gac中

                                                        Assembly.LoadFrom()、Assembly.LoadFile()的区别

  Assembly.LoadFrom()

  它是加载程序集文件的内容,只将传入参数的文件加载,不考虑程序集依赖,但如果有相同实现,但位置不同的文件用LoadFrom是不能同时加载进来的

  Assembly.LoadFile()

  由于LoadFile加载的是文件,所以调用它之后,可能因为缺少必要的依赖造成无法被执行,如果有相同实现,但位置不同的文件用LoadFile是可以同时加载进来的

前期绑定(early-binding)和后期绑定(late-binding)的区别

前期绑定

前期绑定是在编译的时候就确定了要绑定的数据,前期绑定如果失败,会在编译时报编译错误

后期绑定

而后期绑定是在运行的时候才填充数据,后期绑定失败只有在运行时的时候才发生

使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别

Web服务

Web服务使用的消息机制. Web Service能用于不同平台,不同语言。

Remoting

Remoting采用的RPC,Remoting只适用于.Net。效率上Remoting高于Xml Web Service

面向接口、面向对象、面向方面编程的区别

面向接口

面向接口更关注的是概念,它的原则是先定义好行为规范,再根据行为规范创建实现,严格的来说,面向接口应该是面向对象中的一部分吧,因为面向对象也强调的是依赖倒置原则,也就是实现依赖于抽象,而抽象不依赖于具体实现,更具比较的应该是面向接口与面向抽象对象,我的体会是面向接口更加灵活,但实现时候,稍微有些代码冗余,而面向抽象可以结合面向接口,先定义接口,再定义抽象类,在抽象类中处理一些公共逻辑,再实现具体实现类。

面向对象

面向对象是对复杂问题的分解

面向方面

面向方面的编程是一种新概念,它解决了很多面向对象无法解决的问题,比如面向对象技术只能对业务相关的代码模块化,而无法对和业务无关的代码模块化。而面向方面正是解决这一问题的方案,它的关键思想是"将应用程序中的商业逻辑与对其提供支持的通用服务进行分离"。

线程与进程的区别

线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产

  强类型和弱类型的区别

强类型

在编译的时候就确定类型的数据,在执行时类型不能更改,强类型安全,效率高,一般用于编译型编程语言,如c++,java,c#,pascal等

弱类型

而弱类型在执行的时候才会确定类型,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编程语言,如javascript,vb等

  Remoting的信道Tcp和Http的区别

Tcp

Tcp信道提供了基于Socket的传输工具,使用Tcp协议来跨越Remoting边界传输序列化的消息流.TcpChannel使用二进制格式序列化消息对象,因此它具有更高的传输性能。

Http   

HttpChannel类型使用Soap格式序列化消息对象,因此它具有更好的互操作性.

 

posted @ 2013-01-06 11:37  ☆会飞的鱼☆  阅读(486)  评论(0编辑  收藏  举报