.Net C#常见面试题

     
(一)  填空: (1)面向对象的语言具有___继承性、_封装___性、___多态性。

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

           (3)列举ADO.net中的五个主要对象Command、Connection、DataSet、DataSetCommand、DataReader。

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

评分标准: 答对一点得2分,两点得5分,3点得7分。全对得10分。

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

 

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();
           }

       }

一、选择填空题(每空2分,共60分)
1.在对SQL Server 数据库操作时应选用(a)。
a)SQL Server .NET Framework 数据提供程序;
b)OLE DB .NET Framework 数据提供程序;
c)ODBC .NET Framework 数据提供程序;
d)Oracle .NET Framework数据提供程序;
2.下列选项中,(c)是引用类型。
a)enum类型
b)struct类型
c)string类型
d)int类型
3.关于ASP.NET中的代码隐藏文件的描述正确的是(c)
a)Web窗体页的程序的逻辑由代码组成,这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名。
b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。
c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件。
d)以上都不正确。
4.以下描述错误的是(a)
a)在C++中支持抽象类而在C#中不支持抽象类。
b)C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员。
c)在C#中可使用 new 修饰符显式隐藏从基类继承的成员。
d)在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。
5.C#的数据类型有(b)
a)值类型和调用类型;
b)值类型和引用类型;
c)引用类型和关系类型;
d)关系类型和调用类型;
6.下列描述错误的是(d)
a)类不可以多重继承而接口可以;
b)抽象类自身可以定义成员而接口不可以;
c)抽象类和接口都不能被实例化;
d)一个类可以有多个基类和多个基接口;
7.在DOM中,装载一个XML文档的方法(b)
a)save方法
b)load方法
c)loadXML方法
d)send方法
8.下列关于构造函数的描述正确的是(c)
a)构造函数可以声明返回类型。
b)构造函数不可以用private修饰
c)构造函数必须与类名相同
d)构造函数不能带参数
9.以下是一些C#中的枚举型的定义,其中错误的用法有(c)//经过测试其实都对。
a)public enum var1{ Mike = 100, Nike = 102, Jike }
b)public enum var1{ Mike = 100, Nike, Jike }
c)public enum var1{ Mike=-1 , Nike, Jike }
d)public enum var1{ Mike , Nike , Jike }
10.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是(d)。
a)9
b)2
c)6
d)越界
11.接口是一种引用类型,在接口中可以声明(a),但不可以声明公有的域或私有的成员变量。
a)方法、属性、索引器和事件;
b)方法、属性信息、属性;
c)索引器和字段;
d)事件和字段;
12.ASP.NET框架中,服务器控件是为配合Web表单工作而专门设计的。服务器控件有两种类型,它们是(a )
a)HTML控件和Web控件
b)HTML控件和XML控件
c)XML控件和Web控件
d)HTML控件和IIS控件
13.ASP.NET中,在Web窗体页上注册一个用户控件,指定该控件的名称为”Mike”,正确的注册指令为( b)
a)<%@Register TagPrefix = “Mike” TagName = “Space2” Src = “myX.ascx”%>
b)<%@Register TagPrefix = “Space2” TagName = “Mike” Src = “myX.ascx”%>
c)<%@Register TagPrefix = “SpaceX” TagName = “Space2” Src = “Mike”%>
d)以上皆非
14.在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。
a)insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;
b)ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
c)Select操作的Sql语句只能由ExecuteReader()方法来执行;
d)ExecuteReader()方法返回一个DataReder对象;
15.下列ASP.NET语句(b)正确地创建了一个与SQL Server 2000数据库的连接。
a)SqlConnection con1 = new Connection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
b)SqlConnection con1 = new SqlConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
c)SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB);
d)SqlConnection con1 = new OleDbConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”);
17.在ADO.NET中执行一个存储过程时,如果要设置输出参数则必须同时设置参数的方向和(d ),必要时还要设置参数尺寸。
a)大小;
b)上限;
c)初始值;
d)类型;
18.如果将窗体的FormBoderStyle设置为None,则(b )。
a)窗体没有边框并不能调整大小;
b)窗体没有边框但能调整大小;
c)窗体有边框但不能调整大小;
d)窗体是透明的;
19.如果要将窗体设置为透明的,则(b )
a)要将FormBoderStyle属性设置为None;
b)要将Opacity属性设置为小于100%得值;
c)要将locked 属性设置为True;
d)要将 Enabled属性设置为True;
20.下列关于C#中索引器理解正确的是( d)
a)索引器的参数必须是两个或两个以上
b)索引器的参数类型必须是整数型
c)索引器没有名字
d)以上皆非
21.下面描述错误的是( c)。
a)窗体也是控件;
b)窗体也是类;
c)控件是从窗体继承来的;
d)窗体的父类是控件类;
22.要对注册表进行操作则必须包含( d)。
a)System.ComponentModel命名空间;
b)System.Collections命名空间;
c)System.Threading命名空间;
d)Microsoft.Win32命名空间;
23.要创建多文档应用程序,需要将窗体的( d)属性设为true。
a)DrawGrid;
b)ShowInTaskbar;
c)Enabled;
d)IsMdiContainer;
24.如果设treeView1=new TreeView(),则treeView1.Nodes.Add("根节点")返回的是一个 (a)类型的值。
a)TreeNode;
b)int;
c)string;
d)TreeView;
25.下面关于XML的描述错误的是(d)。
a)XML提供一种描述结构化数据的方法;
b)XML 是一种简单、与平台无关并被广泛采用的标准;
c)XML文档可承载各种信息;
d)XML只是为了生成结构化文档;
 

 

     

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值