c#面试笔试题(四)

导读:
  
  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
  评分标准: 答对一点得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();
  }
  }
  
  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1768756

本文转自
http://blog.csdn.net/bill090015/archive/2007/09/01/1768756.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值