C#和ASP.Net面试题目集锦

C#和ASP.Net面试题目集锦(一)
1 :维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么

答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策

2 : ADO。NET相对于ADO等主要有什么改进?

答 ADO数据以Recordset 形式存储 ADO.NET以DataSet形式存储

Recordset对数据库持续连接访问ADO.NET提供对数据库断开连接

ADO.NET与ADO相比,优势在于提供了数据集和数据适配器,有利于实现分布式处理,降低对数据库服务器资源的消耗。

3 : ASP。NET与ASP相比,主要有哪些进步?

答 asp.net   可以使用强类型语言

页面是编译,执行速度快, 增加安全性和可靠性

,通过继承机制来支持代码的重用,提供声明性服务器控件减少代码行数

Asp需要解释,执行速度慢,重用代码不方便,没有调试机制

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

答 委托本质上是一种“方法接口”,它相当于C/C++中的函数指针,当然它比函数指针安全,在C#中通常用于事件处理。与JAVA相比,可以避免使用大量小粒度的匿名类。(不过,也许微软就是使用类似于JAVA的匿名类实现委托的,只不过从字面上看起不是那么回事罢了,谁知道呢?)

事件不是委托,不过由于事件的性质决定了处理它的程序逻辑能访问的参数,因此,在C#中处理事件的逻辑都包装为委托(一种“方法接口”)。实际上,如果你处理自定义的事件,就像JAVA中那样用接口实现也是可以的,不过这么做在C#一般没有什么特别的好处。

5:new有几种用法

第一种:new Class();

第二种:覆盖方法

public new XXXX(){}

第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。

6:如何把一个array复制到arrayList里

答 foreach( object o in array )arrayList.Add(o);

7:datagrid.datasouse可以连接什么数据源

答 [dataset,datatable,dataview] dataset,datatable,dataview , IList

8:概述反射和序列化

答 反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性

反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道

答 序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

9:概述o/r mapping 的原理

答 利用反射,配置 将类于数据库表映射

10:类成员有( )种可访问形式

答 可访问性:public ,protected ,private,internal

11:用sealed修饰的类有什么特点

答 sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。密封类不能同时为抽象类。

sealed 修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

11:列举ADO.NET中的五个主要对象,并简单描述

connection,command,dataReader,dataAdapter,dataset ...

12:执行下面代码后:

String strTemp ="abcdefg 某某某";

Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;

Int j = strTemp.Length;

问:i=(14 ) ;j=(11 )

i=(14 ) ;j=(11 ) 中文两个字节

13:C#中,string str = null 与 string str ="",请尽量用文字说明区别。(要点:说明详细的内存空间分配)

答 string str = null 是不分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。

14:概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。

答 远程逻辑调用,remoing接口只能用在.net中

15:什么是code-behind技术

答 aspx and cs   代码隐藏

16:概述三层结构体系

答 表示层 数据层 业务层

17:用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

答:一般为3层

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

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

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

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

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

缺点:   增加成本。

18:什么是ASP.net中的用户控件

答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.

19:什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?

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

    受管制的代码:unsafe:非托管代码。不经过CLR运行。

    强类型系统 RTTI:类型识别系统。

    装箱就是把值类型到引用类型的转换

    拆箱就是引用类型到值类型的转换

    重载   方法名相同 不用个数的参数或者指定不同参数类型

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

    class box{

    int aa(object i)

    {} 

    object bb()

    {}

    }

    int bb=5

    new box().aa(bb)                   //装箱

    int conver=(int)new box().zz();   //拆箱

    //重载

     public void aaa(int rad)

     {     }

     public void aaa(int len,int bre )

     {     }

     public void aaa(sting str)

     {     }

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

答:xml可以统一数据格式,XML可是好东西,保存配置,站与站之间的交流,WEB SERVICE都要用它.

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

答:Connection 对象用于在应用程序和数据库之间的连接

    Command   可以检索和操纵数据库中的数据

    DataAdapter对象充当DataSet和数据源之间用于检索和保存数据的桥接器

    DataSet 对象从数据库检索的数据可以存储在其中能够以XML形式保存

    DataReader 是查询结果的一种只进。只读的视图 不具有DataSet的任何复杂功能

    所以可以加快访问和查看数据的速度 不提供断开式访问

22:如何理解委托?

答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法.

msdn2005中是这样解释的:

委托具有以下特点:委托类似于 C++ 函数指针,但它是类型安全的。

委托允许将方法作为参数进行传递。委托可用于定义回调方法

委托可以链接在一起;例如,可以对一个事件调用多个方法。

方法不需要与委托签名精确匹配。

23:C#中的委托是什么?事件是不是一种委托?

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

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

是,是一种特殊的委托


24:UDP连接和TCP连接的异同。

答: udp前者只管传,不管数据到不到,无须建立连接. tcp后者保证传输的数据准确,须要连结.

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

答:Forms认证,windows集成认证等,passport验证 None

26:进程和线程分别怎么理解?

答:进程是老子,线程是儿子,没有老子就没有儿子,一个老子可以有多个儿子.一个儿子可以成为别人的儿子,一个老子也可以为别的老子生儿子.

27:什么是code-Behind技术。

答:代码分离,这是个明智的东西,或者可以理解成HTML代码写在前台,C#代码写在后台.当然前台也有脚本,类的调用等,其实写在一起也是可以的.

28:net中读写XML的类都归属于哪些命名空间?

答:System.Xml

29解释一下UDDI、WSDL的意义及其作用

答:UDDI 用于注册各个服务提供商提供的服务 以便可以共享它们 它还有助于WEB服务客户或web用户查找该Web服务

wsdl 是web服务描述语言(web Services Description Language)

30:什么是SOAP,有哪些应用。

答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息,具体请看

31:如何理解.net中的垃圾回收机制。

答   GC?对象创建了总要清除啊,不然内存哪够用?

32:常用的调用webservice方法有哪些?

答 HTTP-get Http-post Http-soap

33 概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。

答 远程逻辑调用,remoing接口只能用在.net中

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

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

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

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

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

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

答. 1.使用QueryString,

      源页面

      string url;

       url="anotherwebform.aspx?name=" + TextBox1.Text

       Response.Redirect(url);

      目标页面

       Label1.Text=Request.QueryString["name"];

     2.使用Session变量

      源页面

      Session["name"]=TextBox1.Text;

      Session["email"]=TextBox2.Text;

      Server.Transfer("anotherwebform.aspx");

     目标页面

      Label1.Text=Session["name"].ToString();

      Label2.Text=Session["email"].ToString();

      Session.Remove("name");

      Session.Remove("email");

     3.使用Server.Transfer

      源页面代码:

    public string Name

{

get {

return TextBox1.Text; }

}

//然后调用Server.Transfer方法

private void Button1_Click

(object sender, System.EventArgs e)

{

Server.Transfer("anotherwebform.aspx");

}

     目标页面代码:

private void Page_Load

(object sender, System.EventArgs e)

WebForm1 wf1;

wf1=(WebForm1)Context.Handler;

Label1.Text=wf1.Name;

}

36:一列数的规则如下: 1、1、2、3、5、8、13、21、34......   求第30位数是多少, 用递归算法实现。

答:public class MainClass 

     { 

         public static void Main()   

         { 

             Console.WriteLine(Foo(30)); 

         } 

         public static int Foo(int i) 

         { 

             if (i <= 0) 

                 return 0; 

             else if(i > 0 && i <= 2) 

                 return 1; 

             else return Foo(i -1) + Foo(i - 2); 

         } 

     } 

37:override与重载的区别

答 :

override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

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

38:请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?

答:

       foreach (System.Windows.Forms.Control control in this.Controls)

       {

if (control is System.Windows.Forms.TextBox)

{

     System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;

     tb.Text = String.Empty ;

}

       }

39:请编程实现一个冒泡排序算法?

答:

         int [] array = new int [*] ;

int temp = 0 ;

for (int i = 0 ; i < array.Length - 1 ; i++)

{

for (int j = i + 1 ; j < array.Length ; j++)

{

if (array[j] < array[i])

{

temp = array[i] ;

array[i] = array[j] ;

array[j] = temp ;

}

}

}

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

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

41:求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m

答:

     int Num = this.TextBox1.Text.ToString() ;

int Sum = 0 ;

for (int i = 0 ; i < Num + 1 ; i++)

{

if((i%2) == 1)

{

Sum += i ;

}

else

{

Sum = Sum   - I ;

}

}

System.Console.WriteLine(Sum.ToString());

System.Console.ReadLine() ;

42:在下面的例子里

      using System;

      class A

      {

           public A()

            {

                 PrintFields();

            }

           public virtual void PrintFields(){}

       }

       class B:A

       {

            int x=1;

            int y;

            public B()

    {

                y=-1;

            }

            public override void PrintFields()

            {

                Console.WriteLine("x={0},y={1}",x,y);

            }

当使用new B()创建B的实例时,产生什么输出?

答:X=1,Y=0;x= 1 y = -1

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

答:DataSet:数据存储器。

     DataCommand:执行语句命令。

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

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

答:Windwos(默认)用IIS...

     From(窗体)用帐户

     Passport(密钥)

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

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

46:net Remoting 的工作原理是什么?

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

47:根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写: 

namespace test 

public delegate void OnDBOperate(); 

public class UserControlBase : System.Windows.Forms.UserControl 

public event OnDBOperate OnNew; 

privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)

if(e.Button.Equals(BtnNew)) 

//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。

}

答:if( OnNew != null   

     OnNew( this, e ; 

48:SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号

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

49:根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

public void test(int i) 

    lock(this) 

    if (i>10) 

    { 

      i--; 

      test(i); 

    } 

}

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

50:简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。

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

51:用C#实现以下功能

a 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复

答 :List L=new List();

Random random = new Random();

for (int i = 1; i <= 100; i++)

{

if (L.IndexOf(i) < 0)

{

L.Add(random.Next(1,100));

}

b 对上面生成的数组排序,需要支持升序、降序两种顺序

答   L.Reverse(L);

     L.Sort(L); 

52:请说明.net中的错误处理机制,并举例

答   异常是从 Exception 类类继承的对象。异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。

try

{ //执行代码,不确定是否会出错 }

catch

{ //出错处理 }

finally

{ //无论怎样,都要执行 }

53:请说出强名的含义

答 垃圾回收的原理是根据是否空引用,和该数据类型占用内存来判断该收回多少内存.强类型说白就是必须要有个数据类型.

54:请列出c#中几种循环的方法,并指出他们的不同

答   FOR   WHILE     foreach   do while

55:请指出.net中所有类型的基类

答   object

56:请指出GAC的含义

答   全局访问缓存

57:SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值

答    INSERT INTO jobs (job_desc,min_lvl,max_lvl)

      VALUES ('Accountant',12,125)

  

58:什么是WEB控件?使用WEB控件有那些优势?  

答 web控件就是可以在服务器执行的控件,优势在于可以回传数据,带有事件驱动

59: 请解释ASP。NET中以什么方式进行数据验证?  

答   .net中提供了几个数据验证控件,可以在服务器端或者客户端进行验证。

60: 请谈谈对正则表达式的看法?  

答   主要用在字符串的匹配上面,与具体的语言环境无关。  

   

61:   ASP。NET中共有几种类型的控件?各有什么区别?  

答       Html    控件    传统的html标记  

         Web      控件      可以回传数据,事件驱动  

         自定义    控件    在原有控件的基础上增加功能  

         复合控件          多个子控件复合成一个新的控件  

   

62:   WEB控件可以激法服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回。  

答   通过实现IPostBack这个接口来执行事件。自动回传就是AutoPostBack,使用自动回传可以监视客户端变化情况并将这种改变返回到服务器端              

     

63:   WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?  

答   能,服务器端控件在html中表现形式还是html标记,所以可以执行客户端事件,有多种方式:1、control.Attributes["onclick"]="...;";

          2、<script    for="controlName"    event="onclick"></script>    

                

   

64: 请解释ASP。NET中的web页面与其隐藏类之间的关系?  

答 继承的关系  

   

65: 什么是viewstate,能否禁用?是否所用控件都可以禁用? 

答   可以全部禁用,viewstate就是hidden    input,只不过加上了微软的编码方式记录控件的状态  

     

66: 当发现不能读取页面上的输入的数据时很有可能是什么原因造成的?怎么解决

答   可能就是事件没有关联,或者根本就没有写读取代码。

     解决 检查代码, 设断点调试

   

67:请解释一个WEB页面中代码执行次序。  

答   参看.cs    知道最先执行OnInit();    然后到Page_Load,最后到具体的执行事件。  

   

68:请解释什么是上下文对象,在什么情况下要使用上下文对象  

答   HttpContext,    在类中调用的时候需要用到HttpContext  

   

69:请解释转发与跳转的区别?  

答   Transfer    是转发    包括HttpHandler对象          

     Redirect    就是跳转    

  

70: 请解释ASP。NET中button   linkbutton      imagebutton      及hyperlink这四个控件之间的功别 

答    button    imagebutton 将数据传递回服务器

      hyperlinK 页面之间的导航

      linkbutton主要用于将数据保存到服务器或访问服务器上的数据

71:请解释一下。NET多层应用程序中层与层之间以那几种方式进行数据传递。并解释你自己的项目中采用那种方式进行。  

答    这个传递方式不定,很多都是传递DataSet, XML也可以 

   

72:如果出现ASP。NET中的事件不能触发可能由于什么原因造成?  

答   事件丢失,特别是使用vss的时候最容易造成这种情况,原因不明  

   

73:如果需要在datagride控件中的某一列中添加下拉列表框并绑定数据怎么解决?  

答    使用模板列来添加dropdownlist,绑定数据使用代码前置的方式    

   

74:请解释asp.net中的数据绑定与传统数据绑定有什么区别?  

答   更灵活 更方便 

   

75:请解释.net采用委托实现的事件模型与JAVA中采用接口实现的事件模型有什么区别,

答     以图示方式解释。  

                         

76:请解释接口的显式实现有什么意义?  

答     规定强制执行,保持一致  

77: 什么情况用HTML控件,什么情况用WEB控件,并比较两者差别

答    客户端表现用html控件,如果想和server端交互,那么加上runat=server,它就成了服务器端控件,但它没有web控件的很多方法和属性,如果你需要用到,那么还是用web    controls

78:   C#中的接口和类有什么异同。

答    接口只能包含抽象方法,不能包含任何方法实现,不能创建接口实例,接口成员没有访问修饰符,接口成员必须是方法属性事件或者索引器不能包含常数字段运算符也不能有静态成员


C#和ASP.Net面试题目集锦(二)
1.面向对象的思想主要包括什么?

答:这个题范围太广,不知道说什么.

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

答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.

3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?

答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行时,其它的不清楚.

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

答:XML可是好东西,保存配置,站与站之间的交流,WEB SERVICE都要用它.

5.值类型和引用类型的区别?写出C#的样例代码。

答:结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的,这个不用多写了吧.

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

答:connection command sqladapter dataset datatable dataview等等.写不完了.

7.如何理解委托?

答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法.

msdn2005中是这样解释的:

委托具有以下特点:

委托类似于 C++ 函数指针,但它是类型安全的。

委托允许将方法作为参数进行传递。

委托可用于定义回调方法。

委托可以链接在一起;例如,可以对一个事件调用多个方法。

方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。

C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

8.C#中的接口和类有什么异同。

答:这个异同可多了,要说清楚还真不容易.

9.。net中读写数据库需要用到哪些类?他们的作用

答:这个类自已可以写的啊,你是指基类吗?那configuration,sqlconnection,sqlcommand等都要用到.

10.UDP连接和TCP连接的异同。

答:前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结.

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

答:form认证,windows集成认证等,原理不清楚.

12.进程和线程分别怎么理解?

答:进程是老子,线程是儿子,没有老子就没有儿子,一个老子可以有多个儿子.一个儿子可以成为别人的儿子,一个老子也可以为别的老子生儿子.

13.什么是code-Behind技术。

答:代码分离,这是个明智的东西,像ASP这样混成一堆很不爽.或者可以理解成HTML代码写在前台,C#代码写在后台.当然前台也有脚本,类的调用等,其实写在一起也是可以的.

14.活动目录的作用。

答:这个不明白.请明白的补充一下.

15..net中读写XML的类都归属于哪些命名空间?

答:System.Xml

我自已写的就不一定了,嘿嘿.

16.解释一下UDDI、WSDL的意义及其作用。

答:什么东西?

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

答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一直语言相互通信。这种相互通信采用的是XML格式的消息,具体请看:http://playist.blogchina.com/2521621.html

18.如何部署一个ASP.net页面。

答:随便啦,想直接上传就直接上传,想打包成EXE就打包,看个人喜好.

19.如何理解.net中的垃圾回收机制。

答:GC?对象创建了总要清除啊,不然内存哪够用?

20.常用的调用webservice方法有哪些?

答:调用就调用,还有很多方法吗?


.net笔试题


姓名:                      日期:

1.      填空: (1)面向对象的语言具有________性、_________性、________性。

        (2)能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

        (3)列举ADO.net中的五个主要对象_______________、_____________、_______________、_______________、_________________。

2. 不定项选择:

(1) 以下叙述正确的是:

      A. 接口中可以有虚方法。     B. 一个类可以实现多个接口。
      C. 接口不能被实例化。       D. 接口中可以包含已实现的方法。

   (2) 从数据库读取记录,你可能用到的方法有:

      A. ExecuteNonQuery            B. ExecuteScalar

      C. Fill                        D. ExecuteReader

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


4. 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。)


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


6. 写出程序的输出结果

class Class1 {
       private string str = "Class1.str";
       private int i = 0;
       static void StringConvert(string str) {
           str = "string being converted.";
       }
       static void StringConvert(Class1 c) {
           c.str = "string being converted.";
       }
       static void Add(int i) {
           i++;
       }
       static void AddWithRef(ref int i) {
           i++;
       }
       static void Main() {
           int i1 = 10;
           int i2 = 20;
           string str = "str";
           Class1 c = new Class1();
           Add(i1);
           AddWithRef(ref i2);
           Add(c.i);
           StringConvert(str);        
           StringConvert(c);
           Console.WriteLine(i1);
           Console.WriteLine(i2);
           Console.WriteLine(c.i);
           Console.WriteLine(str);
           Console.WriteLine(c.str);
       }
    }


7.写出程序的输出结果

public abstract class A
{
        public A()
       {
            Console.WriteLine('A');
        }
        public virtual void Fun()
       {
            Console.WriteLine("A.Fun()");
        }
}

public class B: A
{
        public B()
       {
            Console.WriteLine('B');
        }

        public new void Fun()
       {
            Console.WriteLine("B.Fun()");
        }

        public static void Main()
       {
           A a = new B();
           a.Fun();
        }
}


8.      写出程序的输出结果:
public class A
{
        public virtual void Fun1(int i)
       {
            Console.WriteLine(i);
        }

        public void Fun2(A a)  
       {
            a.Fun1(1);
            Fun1(5);
        }
}


public class B : A
{
        public override void Fun1(int i)   
       {
            base.Fun1 (i + 1);
        }

        public static void Main()  
       {
            B b = new B();
            A a = new A();
            a.Fun2(b);
            b.Fun2(a);         
        }
}


9. 一列数的规则如下: 1、1、2、3、5、8、13、21、34......

   求第30位数是多少, 用递归算法实现。(C#语言)


10. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

要求: 1.要有联动性,老鼠和主人的行为是被动的。

2.考虑可扩展性,猫的叫声可能引起其他联动效应。


参考答案:
1. (1) 继承性、封装性、多态性。(考基本概念)
   (2) IEnumerable 、 GetEnumerator (对foreach机制的理解,本来不想出这题的,凑分)
   (3) ... (送分题, 对ADO.net的了解)
评分标准:一空1分,满分10分。


2. (1) B、C (考对接口的理解) (2) B、C、D (考查对ADO.net的熟练程度)
评分标准: 一题5分,不选或者错选均不得分。漏选得2分。满分10分。


3. . private :   私有成员, 在类的内部才可以访问。
     protected : 保护成员,该类内部和继承类中可以访问。
     public :    公共成员,完全公开,没有访问限制。
     internal:   在同一命名空间内可以访问。
评分标准:答对1题2分,2题5分,3题7分。全对10分。 (送分题)


4. 解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)
    评分标准: 写对即10分。(答案不唯一,datagrid 分页可能需要用到)

5. 1.使用QueryString, 如....?id=1; response. Redirect()....
    2.使用Session变量
    3.使用Server.Transfer
    ....等等
   评分标准: 答对1点得3分, 两点7分, 3点10分。


6. (考查值引用和对象引用)
10
21
0
str
string being converted.
评分标准:答对一点得2分,满分10分。


7. A
    B
A.Fun()
评分标准: 写出A.B 得5分,写出A.Fun()得5分,满分10分。
(考查在继承类中构造函数, 以及new 方法, )

 

8. 2
    5
    1
    6


(一些人做这题,头都晕了.... ^_^ )


9.

    public class MainClass
    {
        public static void Main()  
        {
            Console.WriteLine(Foo(30));
        }
        public static int Foo(int i)
        {
            if (i <= 0)
                return 0;
            else if(i > 0 && i <= 2)
                return 1;
            else return Foo(i -1) + Foo(i - 2);
        }
    }
评分标准: 写出return Foo(i -1) + Foo(i - 2); 得5分。

写出if(i > 0 && i <= 2) return 1; 得5分。

           方法参数过多需要扣分(扣除分数 = 参数个数 - 1)

           不用递归算法扣5分

           (递归算法在树结构建立等方面比较常用)


10         

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
            <2>从Mouse和Master中提取抽象(5分)
            <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)


    public interface Observer
    {
        void Response();    //观察者的响应,如是老鼠见到猫的反映
    }
    public interface Subject
    {
        void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject subj)
        {          
            this.name = name;
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {  
        public Master(Subject subj)
        {          
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine("Host waken!");
        }
    }

    public class Cat : Subject
    {
        private ArrayList observers;
        public Cat()
        {  
            this.observers = new ArrayList();
        }
        public void AimAt(Observer obs)
        {
            this.observers.Add(obs);
        }
        public void Cry()
        {
            Console.WriteLine("Cat cryed!");
            foreach (Observer obs in this.observers)
            {
                obs.Response();
            }
        }
    }
    class MainClass
    {      
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    }


//---------------------------------------------------------------------------------------------

设计方法二: 使用event -- delegate设计..
    public delegate void SubEventHandler();
    public abstract class Subject
    {
        public event SubEventHandler SubEvent;
        protected void FireAway()
        {
            if (this.SubEvent != null)
                this.SubEvent();
        }  
    }
    public class Cat : Subject
    {
        public void Cry()
        {
            Console.WriteLine("cat cryed.");
            this.FireAway();
        }
    }
    public abstract class Observer
    {
        public Observer(Subject sub)
        {
            sub.SubEvent += new SubEventHandler(Response);
        }
        public abstract void Response();   
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject sub) : base(sub)
        {  
            this.name = name;
        }
        public override void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {
        public Master(Subject sub) : base(sub){}
        public override void Response()
        {
            Console.WriteLine("host waken");
        }
    }
    class Class1
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值