《C#面试题目答案.docx》由会员分享,可在线阅读,更多相关《C#面试题目答案.docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 .声明名称空间的关键字?作用?(二点)namespace声明名称空间。a.名称空间是一种代码的组织形式,区别不同的代码功能b.减少命名冲突使用using给名称空间取别名。名称空间可以嵌套。2 .C#中有那些访问修饰符以及作用范围?其中类有哪些访问修饰符,默认是什 么?类成员变量有哪些默认是什么?private :私有成员,在类的内部才可以访问。protected :保护成员,该类内部和继承类中可以访问。public :公共成员,彻底公开,没有访问限制。internal:在当前程序集中可以访问。类:internal 僦认)public类成员变量:都可以使用3 .静态变量和非静态变量的区别?(
2、四点)静态变量:静态变量使用static修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有static修饰符声明的变量称做非静态变量在类被实例化时创建 通过对象进行访问 同一个类的不同实例的同一非静态变量可以是不同的值4 .构造函数的特征,在继承的时候其调用顺序?a.与类同名b.无返回类型c.只能由new关键字调用,实例化对象时自动调用。d.如果未定义构造函数,编译器会自动添加一个默认构造函数。如果已经定义了自己的构造 函数,就不会提供默认构造函数。e.构造函数的作用是实例化对象并初始化成员变量f.构造函数不能被继承g.子类在创建对象时
3、,先调用父类的构造方法,在调用自己的构造方法5 .什么是重写,什么是重载?尽量详细重写:父类的方法在子类重写实现,以满足子类需求,父类方法用virtual修饰, 子类方法用override修饰。是运行时多态。重载:在一个类中,方法名相同,参数列表不同(同名不同参,与返回类型,访问修饰 无关,由参数个数,顺序,类型有关。作用:实现编译时多态,方便调用)不同:a.重载在同一个类中,重写在父类和子类中b.重载的方法的参数列表不同,重写时子类的方法和父类的方法具有相同的方法签名(访问 修饰符、返回类型、方法名、参数列表)c.重载不要用关键字,重写:父类方法用virtual修饰,子类方法用overrid
4、e修饰要用关键字 d.重载靠参数来判断调用的方法,重写靠对象的类型来判断调用的方法共同点:都是多个方法共用一个方法名,都是面向对象中多态的体现形式。6 .什么是枚举?以及枚举作用?枚举:是一组已经命名的数值常量。作用:a.使代码便于维护,确保变量的合法性b.使代码更加清晰,允许用描叙性的名称表示整数类型,而不是含糊的数来表示c.枚举是代码便于键入,减少按键次数,便于我们回顾起可选值好处:避免出错、便于使用、使常量的名称故意义7 .什么是常量?以及常量的作用?常量:值不会发生变化的量。用const修饰,声明时必须赋值,作为全局变量时默认是静态 形式。作用:给一些不需要改变的值的变量赋值,以便减少
5、出错工常被用来标识、测量和比较.8 .ADO.NET五大对象,以及其作用?a) .ConnecHon连接对象,建立和数据库连接b) .Command执行命令和存储过程c) .DataReader向前只读的数据流d) .DataAdapter适配器,支持增删查询e) .DataSet数据集对象,相当与内存里的一张或者多张表9 .什么是值类型和引用类型? C#中那些数据类型是值类型哪些是引用类型?什 么是装箱和拆箱?答:基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包 含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复 制对象本身。所有的值
6、类型均隐式派生自System.ValueType.,与引用类型不同,从值类型不 可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。与引用类型不同,值 类型不可能包含null值。然而,可空类型功能允许将null赋给值类型。 每种值类型均有 一个随式的默认构造函数来初始化该类型的默认值。值类型主要由两类组成:结构、枚举、基本数据类型结构分为以下几类:Numeric (数值)类型、整型、浮点型、decimaK book用户定义的结 构。引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class类、 interface接口、delegate委托、内置引用类型:obj
7、ect对象、string字符串装箱:从值类型转变为引用类型拆箱:从引用类型转变为值类型10 .类和结构的区别?(四点)1)、类是引用类型在堆上分配。结构是值类型在栈.上分配。2)、类可以继承和被继承。结构不能被继承,但可以实现接口3)、类可以有默认的无参构造函数和有参的构造函数。结构不能有无参的构造函数,但可以 提供带参的构造函数,必须在构造函数里给所有的成员变量给初始值。4)、类创建对象时必须使用newo结构创建对象可以不用newo5)、类可以在声明字段时给其赋值。结构不能在声明字段时给其赋值,必须在构造函数中给 所有成员赋值。11,什么是属性?什么是特性?属性表示对象的一种状态,是对类成员
8、变量的一种封装,保护其成员变量,并限制其读写权 限。特性是被指定给某一声明的一则附加声明性信息。12 .面向对象包含哪些特征?继承布.哪些特征(至少四点)?为什么要使用继承?面向对象的特征:封装、继承和多态1)继承是可传递的。2)、派生类应当是对基类的扩展。3)、构造函数和析构函数不能被继承。除此以外的其它成员都能被继承。4)、派生类如果定义与继承而来的成员同名的新成员,继承来的成员会被隐藏5)、派生类能够重载父类成员,从而实现类可以展示出多态性。6)、继承具有具有单根性继承的作用:代码的重用,减少代码冗余,结构清晰,可以对现实世界进行摹拟继承是在现有类的基础上添加一些新的东西,从而形成一个新
9、的类的过程13 .抽象类和接口的区别?不同:1)、抽象类可用于引用类型。接口可用于值类型和引用类型。2)、抽象类单继承,接口多继承3)、抽象类关键字abstract class。接口关键字interface4)、抽象类能声明字段、属性、方法、索引器、事件。接口能声明属性、方法、索引器、事 件。5)、抽象类方法签名有访问修饰符。接口方法签名无访问修饰符6)、抽象类子类实现用override关键字。接口子类实现用不要关键字。7)、抽象类描叙类似事物的共有的属性和方法,接口是描叙不相干对象共有的属性和方法共同:都是类的模板、都不能被实例化、都能被继承14 .三层结构,包括那三层?每层作用是什么?为什
10、么要使用三层(4点以上) 以及弊端三层包括:数据访问层、业务逻辑层、表示层。数据访问层:实现对数据的保存和读取操作。业务逻辑层:是表示层与数据访问层之间的桥梁,负责数据处理、传递。表示层:为用户提供一种交互操作界面。关系:表示层一依赖业务逻辑层-依赖数据访问层。使用三层可以提高程序的扩展性,高内聚低耦合,便于开辟分工,架构清晰。弊端:增加开辟成本。15 .什么是存储过程?使用存储过程的好处以及弊端?答:存储过程是SQL语句和可选控制流语句的预编译集合。优点:1 .模块化,可以进行重复调用2 .执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划)可以提高执行效率。3 .存储过程可以用于
11、降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量 T-sql语句的代码流量。4 .增强安全性:a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的 访问;b、提高代码安全,防止SQL注入(但未彻底解决,例如,将数据操作语言一一 DML,附 加到输入参数);缺点:1 .如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则 您仍需要更新程序集中的代码以添加参数、更新GetValue()调用,等等,这时候估计比较 繁琐了。2 .可移植性差由于存储过程将应用程序绑定到SQL Server,因此使用存储过程封装业务逻辑将限制应用 程序的
12、可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不 特定于RDBMS的中间层中可能是一个更佳的选择。3 .调试起来相对麻烦Sql语句灵便,可移植性强,杳询速度比存储过程慢些16,DataReader 和 DataSet 有什么区别?DataReader DataSet最大的区另U在于,DataReader使用时始终占用SqlConnection,在线操作 数据库.任何对SqlConnection的操作都会引起DataReader的异常.因为DataReader每次只在 内存中加载一条数据,所以占用的内存是很小的.因为DataReader的特殊性和高性能.所以 DataR
13、eader是只进的.你读了笫一条后就不能再去读取第一条了.DataSet则是将数据一次性加载在内存中.抛弃数据库连接.读取完毕即抛却数据库连接. 因为DataSet将数据全部加载在内存中.所以比较消耗内存.但是确比DataReader要灵便.可 以动态的添加行,列,数据.对数据库进行回传更新操作17 .谈谈数组,集合,泛型集合特点以及区别?(三点以上)数组的数据类型相同,存储空间连续。定义时必须指定大小。大小不能改变。不能够随意 添加和删除其中的项。集合是存放数据的容器,可以更具实用情况自动调整大小。存放的数据是object型,要进 行装箱拆箱操作。对存放的数据不会进行安全检查。可以在任意位置
14、插入和删除项。泛型集合具有占位符可以指定存放数据的类型,不需要进行装箱拆箱操作。会进行安全检 查,可以调整自身大小。也可以在任意位置插入和删除项。18 .什么是事务?简单描叙事务的四大特性?在ADO.NET中使用事务要用到那 个类?答;数据库事务是指作为单个逻辑工作单元执行的一系列操作,要末全部成功要末全部失败。数据库事务的ACID属性:1) .原子性:事务必须是原子工作单元;对于其数据修改,要末全都执行,要末全都不执行。2) .致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规 则都必须应用于事务的修改,以保持所有数据的完整性。3) .隔离性:由并发事务所作的修改必须
15、与任何其它并发事务所作的修改隔离。事务之间相 对独立,一个事务的失败与成功不会影响到此外事务4) .持久性:事务完成之后,它对于系统的影响是永久性的ADO.NET中使用事务要用 SqlTransaction19.SqlCommand 对象的三个方法 ExecuteNonQuery, ExecuteReader, ExecuteScalar有什么区别?ExecuteNonQuery。用于添删改操作,并返回受影响的行数、ExectueReader。用于查询语句, 返回一个只进只读的记录集返回一个SqlDataReader对象ExectueScalar()用于查询语句,只 返回一行一列的数据20 .
16、述反射和序列化答:反射:公共语言运行库加载器管理应用程序域。这种管理包括将每个程序集加载到相 应的应用程序域以及控制每一个程序集中类型层次结构的内存布局。程序集包含模块,而 模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以 使用反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象中获取类型。 然后,可以调用类型的方法或者访问其字段和属性。序列化:序列化是将对象状态转换为可保持或者传输的格式的过程。与序列化相对的是反序 列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据飞反射是审查元数据并采集关于它类型信息的能力。反射的作用:a、可以使用
17、反射动态的创建类型的实例,将类型绑定到现有对象,或者从现有对 象中获取类型。b、应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现 某个任务时可以使用反射。c、反射主要应用于类库,这些类库需要知道一个类型的定义,以便提供更多的功 能。21 .什么是委托?什么是事件?委托:本质是同一类函数指针的列表。事件:本质是一个委托链。当一个类中的某个成员的类型是委托时,我们称之为类的事件 委托具有以下特点:1)委托类似于C+函数指针,但它是类型安全的。2)委托允许将方法作为参数进行传递。3)委托可用于定义回调方法。4)委托可以链接在一起;例如,可以对一个事件调用多个方法。5)方法不需要与
18、委托签名精确匹配。6)委托是间接调用方法的一种形式7)委托是一种类型,并且是一种引用类型8)委托没有方法的具体实现,但委托可以有实例,并且可以调用9)实例化委托时,要一个方法名作为参数,而且是一个对象的方法名,可以是私有的方法 10)委托是方法的一个别名,调用委托就是调用委托所关联的所有方法22 . new关键字用法答:(l)new运算符用于创建对象和调用构造函数。(2)new修饰符用于向基类成员隐藏继承成员。(3) new约束用于在泛型声明中约束可能用作类型参数的参数的类型。23.解释 DataSet(ds)和 ds as DataSet 的含义?DataSet(ds)将ds强制转换成Dat
19、aSet类型。用于在兼容的引用类型之间执行转换,as运 算符类似于强制转换,所不同的是,当转换失败时,运算符将产生空,而不是引起异常 24. ref与out有什么区别?ref是传递参数的地址,out是返回值,两者有一定的相同之处,无非也有不同点。1 .使用ref前必须对变量赋值,out不用。2.out的函数会清空变量,即使变量已经赋值也不 行,退出函数时所有out引用的变量 都要赋值,ref引用的在使用前不会清空,使用后则覆盖原值。3.通过指定返回类型,可以从方法返回一个值,有时候(也许还没遇至ij,但是我们应该有这 么个方法),需要返回多个值,这时就可以使用ref和Out。总之:ref是有进
20、有出,。出是只出不进。25.ADOo NET相对于ADO等主要有什么改进?ADO以Recordset存储,而ADO.NET则以DataSet表示。Recordset看起来更像单表, 如果让Recordset以多表的方式表示就必须在SQL中进行多表连接。反之,DataSet可 以是多个表的集合。ADO的运作是种在线方式,这意味着不管是浏览或者更新数据 都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用 XML制作数据的一份幅本,ADO.NET的数据库连接也惟独在这段时间需要在线。由于 ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范,而ADO.NE
21、T基于XML格式,数据类型更为丰富并且不需要再做COM编排导致的数据类型转换, 从而提高了整体性能。26举例说明简单工厂的意图,实质,作用,优点及缺点意图:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类 或者接口。实质:由一个工厂类根据传入的参量,动态的决定应该创建出哪一个产品类的实例。优点:通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅 需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的。明确了各 自的职责和权力,有利于整个软件体系结构的优化。缺点:由于工厂类集中了所有实例的创建逻辑,违反了开闭原则,将全部创建逻辑集中 到了
22、一个工厂类中。对系统的维护和扩展非常不利。27 sqicommand 对象的三个方法 ExecuteNonQuery, ExecuteReader, ExecuteScalar Wft 么区别?ExecuteNonQuery。用于添删改操作,并返回受影响的行数、ExectueReader()用于查询语句,返回一个只进只读的记录集返1nl一个SqlDataReader对象 ExectueScalar()用于查询语句,只返回一行一列的数据28 SQL Server存储过程,与触发器的作用,与优缺点存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处 理。存储过程存储在数
23、据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、 有条件执行以及其它强大的编程功能。存储过程在创建时即在服务器上进行编译,所以执行 起来比单个SQL语句快触发器是种特殊类型的存储过程,当使用下面的种或者多种数据修改操作在指定表中对 数据进行修改时,触发器会生效:UPDATE. INSERT或者DELETE o触发器可以查询其 它表,而且可以包含复杂的SQL语句。它们主要用于强制复杂的业务规则或者要求。例 如,可以控制是否允许基于顾客的当前帐户状态插入定单。触发器还有助于强制引用完整性,以便在添加、更新或者删除表中的行时保留表之间已定义 的关系。29什么是元数据元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器 会创建个类定义表,一个字段定义表,和一个方法定义表等,。System.refleMon命名空间 包含的几个类,允许你反射(解析)这些元数据表的代码30 STRING 和 STRINGBUILDER 区别大量字符连接的时候使用stringbuilder, stringbuilder的效率比string高不少。String类有不 可改变性。每次执行字符操作时,都会创建一个新的String对象。StringBuilder类解决了 对字符串进行重复修改的过程中创建大量对象的问题。
限制150内