2014 -- ASP.NET 面试题

1. 简述 private、 protected、 public、 internal 修饰符的访问权限。

答 . private : 私有成员, 在类的内部才可以访问。

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

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

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

2 .列举ASP.NET 页面之间传递值的几种方式。

答. 1.使用QueryString, 如....?id=1; response. Redirect()....

2.使用Session变量

3.使用Server.Transfer

 

4.C#中的委托是什么?事件是不是一种委托?

答 : 委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的引用。

是,是一种特殊的委托

5.override与重载的区别

答 :override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多

次重载以适应不同的需要

Override 是进行基类中函数的重写。为了适应需要。

6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、

Cookie、Application,您有几种方法进行处理?

答 : this.Server.Transfer

Response. Redirect()---QueryString

 

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

答:不是。可以用任意类型。

11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为

什么要这样分层?

答:一般为3层

数据访问层,业务层,表示层。

数据访问层对数据库进行增删查改。

业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密

码的安全等。

表示层为了与用户交互例如用户添加表单。

优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。

缺点: 增加成本。

13.什么叫应用程序域?

答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

14.CTS、CLS、CLR分别作何解释?

答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

15.什么是装箱和拆箱?

答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。

16.什么是受管制的代码?

答:unsafe:非托管代码。不经过CLR运行。

17.什么是强类型系统?

答:RTTI:类型识别系统。

18.net中读写数据库需要用到那些类?他们的作用?

答:DataSet:数据存储器。

DataCommand:执行语句命令。

DataAdapter:数据的集合,用语填充。

19.ASP.net的身份验证方式有哪些?分别是什么原理?

答:10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)

20.什么是Code-Behind技术?

答:代码后植。

21.在.net中,配件的意思是?

答:程序集。(中间语言,源数据,资源,装配清单)

22.常用的调用WebService的方法有哪些?

答:1.使用WSDL.exe命令行工具。

2.使用VS.NET中的Add Web Reference菜单选项

23..net Remoting 的工作原理是什么?

答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置

24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图

象说明其中的区别。

答:string str = null 是不给他分配内存空间,而string str = "" 给它分配

长度为空字符串的内存空间。

25.请详述在dotnet中类(class)与结构(struct)的异同?

答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类

型,是分配在内存的栈上的.

27.分析以下代码,完成填空

string strTmp = "abcdefg某某某";

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;

int j= strTmp.Length;

以上代码执行完后,i= j=

答:i=13,j=10

28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,

ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句

SQL语句获得最后更新的事务号

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX

(LastUpdateDate) FROM table1)

30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及

实际中的应用。

答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传

送提高效率。

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到

以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视

图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的

思路

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

 

33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID

作为主键,注意:ID可能不是连续的。

答:解1: select top 10 * from A where id not in (select top 30 id

from A)

解2: select top 10 * from A where id >(select max(id) from (select

top 30 id from A )as A)

34.面向对象的语言具有________性、_________性、________性

答:封装、继承、多态。

35.能用foreach遍历访问的对象需要实现 ________________接口或声明

________________方法的类型。

答:IEnumerable 、 GetEnumerator。

36.GC是什么? 为什么要有GC?

答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管

理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

37.String s = new String("xyz");创建了几个String Object?

答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

 

39.启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状

态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()

方法可以产生必须退出的标志来停止一个线程。

40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可

继承实体类(concrete class)?

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承

实体类,但前提是实体类必须有明确的构造函数。

41.构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载

Overloading。

42.是否可以继承String类?

答:String类是final类故不可以继承。

43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会

不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return前执行。

44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句

话对不对?

答:不对,有相同的hash code。

45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和

case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不

能作用于swtich。

47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此

对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

48.abstract的method是否可同时是static,是否可同时是native,是否可同时是

synchronized?

答:都不能。

49.List, Set, Map是否继承自Collection接口?

答:List,Set是Map不是

50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是

equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。

equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是

当两个分离的对象的内容和类型相配的话,返回真值。

51.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方

法。

52.sleep() 和 wait() 有什么区别?

答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程

不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被

调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级

(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程

会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

53.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错

?

答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式

转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正

确。

54.谈谈final, finally, finalize的区别。

答:

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新

的子类,不能作为父类被继承。因此 一个类不能既被声明为 abstract的,又被

声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。

被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可

修改。被声明为 final的方法也同样只能使用,不能重载

finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异

常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果

有的话)。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象

从内存中清除出去之前做必要的清理 工作。这个方法是由垃圾收集器在确定这个

对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的

类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工

作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

55.如何处理几十万条并发数据?

答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方

式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来

获取.

56.Session有什么重大BUG,微软提出了什么方法加以解决?

答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate

server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法

捕获Session的END事件。

57.进程和线程的区别?

答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个

进程可以有多个线程,这些线程共享这个进程的资源。

58.堆和栈的区别?

答: 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。

堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆

上。

59.成员变量和成员函数前加static的作用?

答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分

别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数

负责这种统计的动作。

60.ASP。NET与ASP相比,主要有哪些进步?

答:asp解释形,aspx编译型,性能提高,有利于保护源码。

62.请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。

答:session(viewstate) 简单,但易丢失

application 全局

cookie 简单,但可能不支持,可能被伪造

input ttype="hidden" 简单,可能被伪造

url参数 简单,显示于地址栏,长度有限

数据库 稳定,安全,但性能相对弱

63.请指出GAC的含义?

答:全局程序集缓存。

64.向服务器发送请求有几种方式?

答:get,post。get一般为链接方式,post一般为按钮方式。

65.DataReader与Dataset有什么区别?

答:一个是只能向前的只读游标,一个是内存中虚拟的数据库。

66.软件开发过程一般有几个阶段?每个阶段的作用?

答:需求分析,架构设计,代码编写,QA,部署

67.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using

指令 和语句 new 创建实例 new 隐藏基类中方法。

答:using 引入名称空间或者使用非托管资源

new 新建实例或者隐藏父类方法

68.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中

间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空

格数不可超过一个.

答:string inputStr=" xx xx ";

inputStr=Regex.Replace(inputStr.Trim()," *"," ");

 

70.什么叫做SQL注入,如何防止?请举例说明。

答:利用sql关键字对网站进行攻击。过滤关键字'等

71.什么是反射?

答:动态获取程序集信息

72.用Singleton如何写设计模式

答:static属性里面new ,构造函数private

73.什么是Application Pool?

答:Web应用,类似Thread Pool,提高并发性能。

74.什么是虚函数?什么是抽象函数?

答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚

子类必须实现的函数,必须被重写。

75.什么是XML?

答:XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能

理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。

如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象

XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML

中简化修改出来的。它主要用到的有XML、XSL和XPath等。

76.什么是Web Service?UDDI?

答:Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵

守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为

Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将

自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

77.什么是ASP.net中的用户控件?

答:用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类

似ASP中的include..但是功能要强大的多。

78.列举一下你所了解的XML技术及其应用

答:xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和

config

79.ADO.net中常用的对象有哪些?分别描述一下。

答:Connection 数据库连接对象

Command 数据库命令

DataReader 数据读取器

DataSet 数据集

80.什么是code-Behind技术。

答:ASPX,RESX和CS三个后缀的文件,这个就是代码分离.实现了HTML代码和服务

器代码分离.方便代码编写和整理.

81.什么是SOAP,有哪些应用。

答:simple object access protocal,简单对象接受协议.以xml为基本编码结构

,建立在已有通信协议上(如http,不过据说ms在搞最底层的架构在tcp/ip上的

soap)的一种规范Web Service使用的协议..

82.C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处

在哪里?

答:一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加

性质

83.XML 与 HTML 的主要区别

答:1. XML是区分大小写字母的,HTML不区分。

2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以

省略

或者之类的结束标记。在XML中,绝对不能省略掉结束标记。

3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为

结尾。这样分析器就知道不用 查找结束标记了。

4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应

的值。

84.c#中的三元运算符是?

答:?:。

85.当整数a赋值给一个object对象时,整数a将会被?

答:装箱。

86.类成员有_____种可访问形式?

答:this.;new Class().Method;

87.public static const int A=1;这段代码有错误么?是什么?

答:const不能用static修饰。

88.float f=-123.567F; int i=(int)f;i的值现在是_____?

答:-123。

89.委托声明的关键字是______?

答:delegate.

90.用sealed修饰的类有什么特点?

答:密封,不能继承。

91.在Asp.net中所有的自定义用户控件都必须继承自________?

答:Control。

92.在.Net中所有可序列化的类都被标记为_____?

答:[serializable]

93.在.Net托管代码中我们不用担心内存漏洞,这是因为有了______?

答:GC。

95.当类T只声明了私有实例构造函数时,则在T的程序文本外部,___可以___(可

以 or 不可以)从T派生出新的类,不可以____(可以 or 不可以)直接创建T的

任何实例。

答:不可以,不可以。

96.下面这段代码有错误么?

switch (i){

case(): 答://case()条件不能为空

CaseZero();

break;

case 1:

CaseOne();

break;

case 2:

dufault; 答://wrong,格式不正确

CaseTwo();

break;

}

97.在.Net中,类System.Web.UI.Page 可以被继承么?

答:可以。

98..net的错误处理机制是什么?

答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛

,直到找到匹配的Catch为止。

99.利用operator声明且仅声明了==,有什么错误么?

答:要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!="

101.在.net(C# or vb.net)中如何取消一个窗体的关闭。

答:private void Form1_Closing(object sender,

System.ComponentModel.CancelEventArgs e)

{

e.Cancel=true;

}

102.在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么

不同?

答:一个是退出整个应用程序,一个是关闭其中一个form。

 

104.某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密

码单词必须遵循如下规则:

(1) 密码单词的最小长度是两个字母,可以相同,也可以不同

(2) K不可能是单词的第一个字母

(3) 如果L出现,则出现次数不止一次

(4) M不能使最后一个也不能是倒数第二个字母

(5) K出现,则N就一定出现

(6) O如果是最后一个字母,则L一定出现

问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?

A) K B)L C) M D) N

答案:B

问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的

总数是多少?

A)1个 B)3个 C)6个 D)9个

答案:A

问题三:下列哪一个是单词密码?

A) KLLN B) LOML C) MLLO D)NMKO

答案:C

8. 62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等

式成立,如何移动?

答案:62移动成2的6次方

106. C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好

处在哪里?

答:attribute:自定义属性的基类;property :类中的属性

107.C#可否对内存进行直接的操作?

答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,

不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法

108.ADO。NET相对于ADO等主要有什么改进?

答:1:ado.net不依赖于ole db提供程序,而是使用.net托管提供的程序,2:不使

用com3:不在支持动态游标和服务器端游 4:,可以断开connection而保留当前数

据集可用 5:强类型转换 6:xml支持

109.写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击

时显示“禁止右键”。并在2分钟后自动关闭页面。

答:

110.大概描述一下ASP。NET服务器控件的生命周期

答:初始化 加载视图状态 处理回发数据 加载 发送回发更改通知 处理回发事件

预呈现 保存状态 呈现 处置 卸载

111.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,

是否可以implements(实现)interface(接口)?

答:不能,可以实现接口

112.Static Nested Class 和 Inner Class的不同,说得越多越好

答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖

于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

113.,&和&&的区别。

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).

114.HashMap和Hashtable的区别。

答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了

Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,

效率上可能高于Hashtable.

116.Overloaded的方法是否可以改变返回值的类型?

答:Overloaded的方法是可以改变返回值的类型。

117.error和exception有什么区别?

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存

溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从

不会发生的情况。

118.<%# %> 和 <% %> 有什么区别?

答:<%# %>表示绑定的数据源

<% %>是服务器端代码块

119.你觉得ASP.NET 2.0(VS2005)和你以前使用的开发工具(.Net 1.0或其他

)有什么最大的区别?你在以前的平台上使用的哪些开发思想(pattern /

architecture)可以移植到ASP.NET 2.0上 (或者已经内嵌在ASP.NET 2.0中)

答:1 ASP.NET 2.0 把一些代码进行了封装打包,所以相比1.0相同功能减少了很

多代码.

2 同时支持代码分离和页面嵌入服务器端代码两种模式,以前1.0版本,.NET提示帮

助只有在分离的代码文件,无 法 在页面嵌入服务器端代码获得帮助提示,

3 代码和设计界面切换的时候,2.0支持光标定位.这个我比较喜欢

4 在绑定数据,做表的分页.Update,Delete,等操作都可以可视化操作,方便了初

学者

5 在ASP.NET中增加了40多个新的控件,减少了工作量

120.重载与覆盖的区别?

答:1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个

类中方法之间的关系,是水平关系

2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之

间的关系。

3、覆盖要求参数列表相同;重载要求参数列表不同。

4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)

来决定;重载关系,是根据调 用时的实参表与形参表来选择方法体的。

121.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

答:不是。可以用任意类型。

122.在C#中,string str = null 与 string str = " " 请尽量使用文字或图

象说明其中的区别。

答:null是没有空间引用的;

" " 是空间为0的字符串;

 

126.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达

到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排

视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您

的思路:

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中

127.什么是WSE?目前最新的版本是多少?

答:WSE (Web Service Extension) 包来提供最新的WEB服务安全保证,目前最

新版本2.0。

130.abstract class和interface有什么区别?

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用

于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现

该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一

个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方

法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽

象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现

这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性

可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序

体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实

现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给

予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用

接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动

态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符

可以用来决定某对象的类是否实现了接口。



1. 什么是C#?

C#(发音”C sharp”)是一种简单、有别于传统的、面向对象、类型安全的编程语言。C和C++程序员很快就会熟悉它。C#中结合了高生产率的快速应用开发(RAD)语言。

2. C#的有哪些注释类型?

C#中有三种注释类型。
单行(//)
多行(/* */)
Page/XML 注释(///)。

3. C#.NET中使用的命名空间有哪些?

命名空间是类型的逻辑分组。
using System;
using System.Collections.Generic;
using System.Windows.Forms;

4. C#有哪些特点?

C#有以下特点:

简单
类型安全
灵活
面向对象
兼容
持久化
互操作性
有别于传统

5. 继承有哪些不同的类别?

在面向对象编程中继承的四种类型:

单继承:包括一个基类和一个派生类。

多层继承(Hierarchical inheritance) :包括一个基类和继承自同一个基类的派生类。

多级继承(Multilevel inheritance):包括从一个派生类派生出来的类。

多重继承(Multiple inheritance):包括多个基类和一个派生类。

6. 面向对象编程的基本概念是什么?

有必要理解一些在面向对象编程中广泛使用的概念。它们包括:

对象

数据抽象和封装
继承
多态性
动态绑定
信息传递。

7. 你可以继承多个接口吗?

可以的。在C#中可能继承多个接口。

8. 什么是继承?

继承是从一个已经存在的类中派生出来的新类。

9. Define scope?定义作用域?

作用域指的是代码中一个变量可以被访问的区域。

10. public、static和void之间的区别是什么?

public:关键字public是访问修饰符,用来告诉C#编译器主(Main)方法可以被任何人调用。

static:关键字static表明主(Main)方法是一个全局方法,不需要穿件类实例即可访问。编译器储存该方法的地址作为切入点,并利用这个信息在任何对象创建之前开始执行它。

void:关键字void是一个类型修饰符表明主(Main)方法不返回任何值。

11. C#中的修饰符有哪些?

Abstract
Sealed
Virtual
Const
Event
Extern
Override
Readonly
Static
New

12. C#中访问修饰符的种类有哪些?

C#中的访问修饰符是:

public
protect
private
internal
internal protect

13. 什么是装箱和拆箱?

变量值类型隐式转换为引用类型成为装箱,例如integer到object的类型转换。

引用类型变量转换回值类型成为拆箱。

14. 对象是什么?

对象是类的实例。对象的创建使用new操作。一个类在内存中创建一个对象,将包含特定对象的值和行为(或者方法)的信息。

15. C#中有哪些类型的数组?

一维数组(Single-Dimensional)
多维数组(Multidimensional)
交错数组(Jagged arrays)。

16. 对象和实例之间的区别是什么?

用户定义的类型的实例称为一个对象。我们可以从一个类实例化很多对象。

对象是类的实例。

17. Define destructors?定义析构函数?

当类对象超出作用域或者被明确删除的时候,析构函数被调用。析构函数,顾名思义是用来销毁由构造函数创建的对象的。正如构造函数,析构函数是一个类成员方法,方法名和类名相同,只是由波浪号开头。

18. 枚举数据类型怎么用?

枚举类型是另一种用户定义类型,它提供了一种连接名字为数字的方式,从而提高了代码的可理解性。enum关键字自动地枚举一组词,赋予它们的值为0,1,2并以此类推。

19. 定义构造函数?

构造函数是和它的类同名的成员方法。每当创建其关联的类的对象时构造函数都会被调用。它之所以被称为构造函数是因为它构造了类的数据成员的值。

20. 什么是封装?

包装数据和功能成为一个单元(称为类)就被称为封装。封装包含并且隐藏对象信息,例如内部数据结构和代码。

21. C#支持多重继承吗?

不支持,它不可能。支持多级继承。

22. 什么是ENUM?

Enum用于定义常量。

23. 数据集是什么?

数据集(DataSet)是从任何数据源载入数据的内存表示。

24. private和public关键字的区别是什么?

Private:关键字private是默认访问级别,并且在所有其他访问级别中是最严格的。它给予一个类型或者类型成员最小的权限。私有成员仅仅在声明其的类体中可以被访问。

Public:关键字public是所有访问级别中最自由地,没有任何访问限制。公共成员的访问不仅可以来自外部,也可以来自内部,并且可以自由访问定义在类体内或者体外的任何成员。

25. 定义多态性?

多态性意味着一个名字,多种形式。它使我们在一个程序中可以定义一个以上相同名字的方法。它让我们重载操作以便这样的操作可以对不同的实例表现不同的行为。

26. 什么是交错数组?

交错数组是元素为数组的数组。

交错数组元素的维度和大小可以不同。

交错数组有时称为“数组的数组”。

27. 什么是抽象基类?

抽象类是被设计为专门用于作为基类的类。抽象类至少还有一个纯虚方法。

28. 方法重写和方法重载有什么区别?

当重写一个方法时,你改变了派生类中方法的行为。重载方法只涉及在类中另一个同名的方法。

29. ref和out参数之间的区别是什么?

传递给ref参数的参数必须先初始化。与此相比,对out参数来说,在参数传递给out参数之前不需要显示初始化。

30. C#中using语句怎么用?

using语句通常是获取资源,执行语句,然后释放该资源。

31. 什么是序列化?

序列化(Serialization)是将对象转换为字节流的过程。

反序列化(De-serialization)是从字节流创建对象这样相反的过程。

序列化/反序列化常用于传递对象。

32. 结构和类之间有什么区别?

结构是值类型,类是引用类型。

结构不能有构造函数和析构函数。

类可以同时有构造函数和析构函数。

结构不支持继承,而类支持继承。

33. 类和接口之间有什么区别?

类(Class)是对象的逻辑表示。它是数据集合和相关子过程的定义。

接口(Interface)也是一个类,包含没有任何方法体定义的方法。类不支持多重继承,但是接口支持。

34. 什么是委托?

委托是类型安全,面向对象的函数指针的实现,并且在许多一个组件需要回调到使用它的组件这样的情况下使用。

35. 什么是认证与授权?

认证是识别用户的过程。认证是以证书(用户名和密码)来识别/验证用户。

授权在认证之后执行。授权是一个基于这些用户身份授予访问权限的过程。

授权允许用户对特定资源的访问。

36. 什么是基类?

类声明可以通过类名加一个冒号和基类名来指定基类。省略基类说明等同于从object类派生。

37. “this”可以在静态方法中用吗?

不,‘This’不能在静态方法中使用。仅仅只有静态变量/方法可以在静态方法中使用。

38. constants、readonly和static之间的区别是什么?

Constants: 值不能变。

Read-only: 值在类的构造函数中仅仅初始化一次。

Static: 值可以被初始化一次。

39. C#中支持哪些语句类型?

C#支持的几种不同的语句类型是

块语句
声明语句
表达式语句
选择语句
迭代语句
跳转语句
异常处理语句
检查和未检查
Lock语句

40. 什么是接口类?

它是一个抽象类,所有公共抽象方法必须要在其继承类中实现。

41. 什么是值类型和引用类型?

值类型存储在堆栈中。
例如: bool, byte, chat, decimal, double, enum, float, int, long, sbyte, short, strut, uint, ulong, ushort。

引用类型存储在托管堆中。
例如: class, delegate, interface, object, string。

42. 关键字string和System.String类之间有什么区别?

关键字string是System.String类的别名。所以,System.String和关键字string是一样的,你可以使用任何你喜欢的命名约定。String类提供了许多方法用于安全创建,操作和比较字符串。

43. C#中提供的两种数据类型是什么?

值类型
引用类型

44. 有哪些缓存的种类?

有三种类型的缓存:

输出缓存(Output Caching):存储asp.net页面的应答信息。

片段缓存(Fragment Caching):仅缓存/存储部分页面内容(用户控制)。

数据缓存(Data Caching):为了性能通过编程的方式来缓存对象。

45. 自定义控件和用户控件之间的区别是什么?

自定义控件是编译后的代码(Dlls),容易使用,创建困难,可以放在工具箱。拖拉使用的控件。

属性可以直观地在设计时指定。可以被多个应用程序使用(如果共享Dlls),即使是私有的也能拷贝到web应用程序的bin目录,添加引用和使用。通常是用来为独立的消费应用程序提供公用功能。

用户控件和ASP的include文件,轻松创建,不能放置在箱中来拖拉放置它。用户控件在单个应用程序文件之间共享。

46. 什么是方法?

方法是由对象或者类执行来实现计算或者操作的成员。静态方法通过类访问。实例方法通过类的实例来访问。

47. 什么是域?

域是类或者类的实例相关的变量。

48. 什么是事件?

事件是使一个类或对象能够提供通知的成员。事件声明像域声明一样,除了声明包含event关键字并且类型必须为委托类型。

49.什么是文本和它们的类型?

文本是程序分配给变量的值常量。C#支持的几种文本类型是

整数(Integer literals)
实数(Real literals)
布尔值(Boolean literals)
单字符(Single character literals)
字符串(String literals)
反斜线(Backslash character literals)

50. 值类型和引用类型的区别是什么?

值类型存储在堆栈上,是一个变量的值赋值给另一个变量。

引用类型存储在托管堆上,是两个引用变量之间的发生赋值。

51. C#有什么特性?

C#是一个简单而强大的编程语言,用于编写企业版的应用程序。
它是C++和VB的混合体。它保留了许多C++特性,如语句,表达式和运算符并结合了VB的生产力。

C#帮助开发者轻易地构建网络服务,能够通过任何语言,任何平台来访问Internet。

C#帮助开发者用更少的代码完成开发,从而在代码中错误更少。

C#引入了相当大的改进和创新,如类型安全,版本控制,事件和垃圾收集这些领域。

52. 错误的类型是什么?

语法错误(Syntax error)
逻辑错误(Logic error)
运行时错误(Runtime error)

53. break和continue语句之间有什么区别?

break语句是用来终止当前封闭循环或者它所在的条件语句的。我们已经使用break语句跳出switch语句。

continue语句是用来改变执行顺序的。和break语句那样跳出循环相反,continue语句停止当前迭代并且只将控制返回到循环顶部。

54. 定义命名空间?

命名空间被称为容器,用来组织分层的.NET类。

55. 什么是代码组?

代码组是一组共享安全上下文的套件。

56. C#中什么是密封类?

sealed修饰符用来阻止从一个类派生。如果一个密封类被指定为另一个类的基类时会发生编译时错误。

57. 静态方法和实例方法的区别是什么?

以static修饰符声明的方法是静态方法。静态方法不操作具体的实例,并且只能被静态成员访问。

没有以static修饰符声明的方法是实例方法。实例方法操作一个具体的实例并且可以被静态和实例成员访问。在其上调用实例方法的实例可以像这样显示访问。在静态方法中这么调用是错误的。

58. C#中有哪些变量的类型?

C#中不同的变量类型是:

静态变量(static variables)
实例变量(instance variable)
值参数(value parameters)
引用参数(reference parameters)
数组元素(array elements)
输出参数(output parameters)
局部变量(local variables)

59. 方法重载是什么意思?

方法重载允许在同一个类中的多个方法有相同的名字,只要它们具有独特的签名。当编译一个重载方法的调用时,编译器使用重载决策决定具体调用的方法。

60. 什么是参数?

参数是用来传递值或者变量引用给方法的。方法的参数从被调用方法时指定的参数得到它们实际的值。有四种参数:值参数,引用参数,输出参数和参数数组。

61. C#是面向对象的语言吗?

是的,C#和传统的Java及C++一样是面向对象的语言。

62. Array和Arraylist之间的区别是什么?

数组是相同类型的集合。数组大小在它声明的时候就固定了。链表和数组相似,但它没有固定的大小。

63. C#中有什么特殊的运算符?

C#支持一下特殊运算符。

is (关系运算符)
as (关系运算符)
typeof (类型运算符)
sizeof (大小运算符,用于获取非托管类的大小)
new (对象运算符)
.dot (成员访问运算符)
checked (溢出检查)
unchecked?(防止溢出检查)

64. C#中运算符的含义是什么?

运算符是界定了对类实例应用特定的运算表达式内涵的成员。可以定义三种类型的运算符:一元运算符,二元运算符和转换运算符。所有的运算符必须声明为public和static的。

65. 什么是类型参数化?

类型参数化是一个类型在另一个值或者类型之上参数化。

66. 抽象类的特性是什么?

抽象类不能被实力化,在抽象类上使用new操作符是错误的。

抽象类允许(但不必要)包含抽象方法和入口。

抽象类不能用scaled修饰符。

67. abstract关键字怎么用?

修饰符abstract是用于类的关键字,以表明这个类本身不能直接有实例或者对象,并且对于其他类来说它只能是一个“基类”。

68. goto语句怎么用?

goto语句仍然包含在C#语言中。这个goto可以用来从一个循环内部跳转到外部。但是从循环外部跳入循环内是不允许的。

69. 控制台应用程序和窗口应用程序有什么区别?

控制台应用程序,设计用来在没有用户界面的命令行中运行。
窗口应用程序,设计用来通过用户界面在用户桌面执行。

70. return语句怎么用?

return语句与程序 (方法或者函数)相关。在执行return语句的时候,系统将控制权从被调用程序交给调用程序。return语句用于两种目的:

立即返回当前执行的代码的调用者

返回给当前执行的代码的调用者一些值。

71. Array和LinkedList之间的区别是什么?

数组是不关心彼此元素位置的简单数字序列。他们之间的位置彼此独立。增加,删除或者修改任何数组元素都是非常容易的。相对于数组,链表是一个复杂的数字序列。

72. C#有throws子句吗?

不,不像Java,C#不需要开发者指定方法可以抛出的异常。

73. C#支持可变数目的参数吗?

是的,使用params关键字。该参数指定为特定类型的参数列表。

74. 可以重写私有虚方法吗?

不可以,私有方法不能在类外访问。

75. 什么是多播委托?

每个委托对象保持对一个单独方法的引用。但是,一个委托对象保持对多个方法的引用并调用它们是可能的。这样的委托对象成为多播委托或者组合委托。

76. 什么是C#独有的特性?

XML文档.

77. 在C#中使用异常是推荐的吗?

是的,在.NET框架中异常是推荐的错误处理机制。

78. 在switch语句中break语句是做什么的?

break语句终结它所在的循环。它也改变了程序执行的流程。

在switch语句中,break语句用在一个case语句的结尾处。在C#中break语句是强制性的,避免了一个case语句流向另一个case语句。

79. Is C# object oriented?C#是面向对象的吗?

是的,C#和传统的Java及C++一样是面向对象的语言。

80. 什么是智能导航?

因为服务端验证和页面被刷新导致页面刷新时,光标位置保持不变。

81. CONST和READONLY的区别是什么?

都是为了定义常量值。const字段只能在声明这个域的时候初始化。readonly字段可以在声明时或者构造函数中定义。

82. C#有throws子句吗?

不,不像Java,C#不需要(甚至不允许)开发者指定方法可以抛出的异常。

83. 方法可以重载的不同方式是什么?

不同的参数类型,不同的参数个数,不同的参数顺序。

84. 事件有返回值吗?

没有,事件没有返回类型。

85. 事件是什么?

事件是一个基于另一个程序方法执行的动作。

事件是被对象或者类使用来通知其他对象发生的事件的委托类型类成员。

事件可以通过event关键字来声明。

86. 什么是标识符?

标识符无他,它是用来在程序中唯一识别各种实体的名称。

87. C#中有哪些不同的文本类型?

布尔值: True和False是Boolean类型,分别映射到真和假的状态。

整数:用于编写类型Int,uInt,long和ulong的值。

实数:用于编写类型float, double和decimal的值。

字符:代表单字符,通常由有引号的字符组成,如‘a’。

字符串: C#支持两种类型的字符串,规则字符串和原义字符串。规则字符串由0个或多个括在双引号中的字符组成,如“116110″。原义字符串由@字符后跟带双引号的字符组成,如@”hello”。

Null: 代表null类型。

88. 什么是数据封装?

数据封装,也被称为数据隐藏,它是类的实现细节对保持对用户隐匿的机制。用户只能通过执行称为方法的特殊函数来对隐藏了成员的类执行一组有限的操作。

89. 可以重写私有虚方法吗?

不可以,私有方法不能在类外访问。

90. 子程序和函数的主要区别是什么?

子程序没有返回值,而函数有。

91. C#和C++的区别是什么?

C#不支持#include语句。它只用using语句。

C#中,类定义在最后不使用分号。

C#不支持多重继承。

数据类型的显示转换在C#中比C++中安全很多。

C#中switch也可用于字符串值。

命令行参数数组的行为在C#中和C++中不一样。

92. 什么是嵌套类?

嵌套类是类中的类。

嵌套类是声明发生在另一个类或者接口里面的任何类。

93. 可以给静态构造函数参数吗?

不可以,静态构造函数不可以有参数。

94. C#中,字符串是值类型还是引用类型?

字符串是对象(引用类型)。

95. C#提供拷贝构造函数吗?

不,C#不提供拷贝构造函数。

96. 类或者结构可以有多个构造函数吗?

可以,类或者结构可以有多个构造函数。C#中构造函数可以被重载。

97. 可以创建接口的实例吗?

不可以,你不可以创建接口的实例。

98. 接口可以包含字段吗?

不可以,接口不能包含字段。

99. 类可以有静态构造函数吗?

是的,类可以有静态构造函数。静态构造函数在任何静态字段被访问之前被立即自动调用,并且通常用来初始化静态类成员。它在第一个实例被创建或者任何静态成员被引用之前自动调用。静态构造函数在实例构造函数之前调用。一个例子如下所示。

100. C#中委托的主要作用是什么?

委托主要用于定义回调方法。

101. 投影(Shadowing)和重写(overriding)的区别是什么?

重写仅仅重定义实现而投影重定义整个元素。

重写派生类可以通过“ME”关键字引用父类元素,但投影中你可以通过”MYBASE”访问父类元素。

102. 事件可以用访问修饰符吗?

可以,你可以在事件中用访问修饰符。你可以对事件使用portected关键字,这样只允许继承类访问。你可以使用private修饰事件,仅可以供当前类对象访问。

103. 为什么在代码中用virtual关键字?

代码中Virtual关键字是用来定义可以在派生类中重写的方法和属性的。

104. 什么是构造函数和析构函数?

构造函数和析构函数是特殊的方法。

构造函数和析构函数是每个类的特殊方法。

每个类都有自己的构造函数和析构函数,并且在类实例被创建或者销毁时自动调用。

每当你访问类的时候,构造函数就初始化所有类成员。当对象不想再需要的时候,析构函数就销毁它们。

105. 我们怎么抑制finalize方法?

GC.SuppressFinalize()。

106. C#支持可变数目的参数吗?

是的,使用params关键字。

该参数指定为特定类型的参数列表,例如,int。为了最大的灵活性,类型可以是object。

使用这种方法的标准例子是System.console.writeLine()。

107. 哪个方法用来启动一个线程?
Start。

108. 什么是泛型?

泛型帮助我们创建灵活的强类型集合。

泛型基本上从数据类型中分离了逻辑,以保持更好的可重用性,更好的可维护性等等。

109. 有哪些不同种类的多态性?

有两种类型的多态,它们是:

编译时多态性

运行时多态性

110. 编译时多态性和运行时多态性的区别是什么?

编译时多态性

编译时多态性也被称为方法重载。

方法重载是指有两个或更多同名但含有不同签名的方法。

运行时多态性

运行时多态性也被称为方法重写。

方法重写是指有两个或更多的同名方法,含有相同的方法签名但对应不同的实现。

111. 哪一个命名空间使XML中多线程编程可行?

System.Threading。

112. 在C#中可以声明一个静态块吗?

不可以,因为C#不支持静态块,但它支持静态方法。

113. 方法可以声明为密封(sealed)吗?

在C#中方法不可以声明为sealed。但当我们在派生类重写一个方法的时候,我们可以将重写的方法定义为sealed。通过其sealed,我们就可以避免对该方法的进一步重写。

114. 在C#中用什么命令来实现属性?

C#中用get和set修饰符来实现属性。

115. 什么是静态成员?

定义为静态的成员,可以从类级别上直接调用,而不是从类实例上调用。

116. C#中继承一个类的语法是什么?

当一个类从另一个类派生时,基类的成员就变为派生的成员。

在访问基类的成员所使用的访问修饰符指定了派生类中的基类成员的访问状态。

C#中从另一个类继承类的语法如下:

class MyNewClass : MyBaseClass

117. C#中while循环和do while循环的基本区别是什么?

while循环在一开始测试它的条件,这意味着如果条件求值为真,封闭的语句块执行0或者更多次。do while循环至少遍历一次语句块然后在最后才检查条件。

118. 子程序和函数的主要区别是什么?

子程序没有返回值,而函数有。

119. C#中什么是密封类?

sealed修饰符用来阻止从一个类派生。如果一个密封类被指定为另一个类的基类时会发生编译时错误。

120.类和接口的区别是什么?

抽象类可以实现它的一些成员,但接口不能实现它的任何成员。

接口不能有字段,而抽象类可以有字段。

接口仅可以从另一个接口继承并且不能继承抽象类,而抽象类可以继承另一个抽象类或另一个接口。

类可以同时继承多个接口,而类不能同时继承多个类。

抽象类的成员可以定义访问修饰符而接口成员不能定义访问修饰符。

121. 抽象方法和虚方法之间的区别是什么?

抽象方法不提供实现,并且强制派生类重写该方法(除非派生类也是个抽象类),而虚方法可以有实现并且在派生类中重写与否是可选的。因此虚方法可以实现并提供了派生类重写的选择。抽象方法不能提供实现并且强制派生类重写该方法。

122. 什么是静态方法?

只要方法不试图访问任何实例数据或者其他实例方法,那么声明它为静态的是可能的。

123. 什么是New修饰符?

new修饰符隐藏了基类的成员。C#仅仅支持签名的隐藏。

124. C#中get和set属性的优势是什么?

get属性访问器用于返回属性值。

set属性访问器用来设置新的值。

125. const和readonly之间有什么区别?

const声明的字段不能使用static修饰符,而readonly可以使用static修饰符。

const字段只能在声明时初始化,而readonly可以在声明时或在构造函数中初始化。

const字段的值在设计时就计算出来了,而readonly的值在运行时计算。




@文章出处:http://www.cnblogs.com/qixuejia/archive/2010/11/18/1881145.html

你可能感兴趣的:(面试相关)