一、 基础知识部分(每题3分,共60分)
- 委托是什么,事件跟委托是不是一回事?
答案 |
委托是一种传递消息的机制,可以将与委托签名相同的方法作为参数传递 签名相同包括:方法的返回值类型,参数个数和类型 事件是一种特殊的委托 |
- net中读写数据库需要用到那些类?他们的作用?
答案 |
SqlConnection 连接数据库 SqlCommand 执行Sql语句或存储过程 SqlDataReader 实现对数据表记录向前只读,一次读取一条记录 SqlDataAapter 执行Sql语句或存储过程 SqlParameter 向Sql语句或存储过程传递参数 |
- DataSet和DataReader的区别是什么?
答案 |
DataSet提供一个内存中数据的关系表示形式,相当于内存中的数据库。DataSet中包含表集合和表和表之间的关系。 DataReader提供一个来自数据库的快速、向前、只读数据流。 DataSet 和DataReader都是ADO.NET提供以下两个操作关系数据库的主要对象。 DataSet经常会利用DataAdapter一次性从数据库里提取大量数据存放在其中,实现与用户数据源进行双向交互。当使用DataSet时,也可以利用DataView对DataSet中的数据应用排序和筛选。也可以从DataSet继承,创建强类型DataSet,用于将表、行和列作为强类型对象属性公开。 |
- 能用foreach遍历访问的对象需要实现哪个接口或声明哪个方法的类型?
答案 |
IEnumerable 、 GetEnumerator |
- 简述 private、 protected、 public、 internal 修饰符的访问权限
答案 |
Public 公有,其他类都可以访问 Protected 保护,只有本类和子类可以访问 Private 私有,只有本类可以使用 Internal 内部,本程序集中的类可以使用。 |
- 列举ASP.NET 页面之间传递值的几种方式
答案 |
1.使用Url重写QueryString, 如....?id=1; response. Redirect().... 3.使用Cookie 4.使用Server.Transfer 5.使用Button控件的PostBackUrl属性 |
- CTS、CLS、CLR分别作何解释?
答案 |
CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。 |
- 什么是装箱和拆箱?
答案 |
从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。 |
- 分析以下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i=? j=?
答案 |
i=13(i输出的是字节数,一个汉字占两个字节),j=10(输出字符数,不分中英文) |
- GC是什么? 如何请求GC?
答案 |
GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: |
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
答案 |
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,前提是实体类必须有明确的构造函数。 |
- 什么是自定义控件?动态如何传数据?
答案 |
1) 概述:自定义控件也是asp.net的一种服务器控件,体现格式为*.dll 2) 适用场合:当.net平台给我们提供的web服务器控件不够用的时候,就需要我们自己开发一个自定义控件,或者又称为第三方控件;可以把该种控件添加到工具箱中,然后就像使用Web服务器控件一样。例如:分页控件 3) 在控件内部公开属性,通过给属性赋值进行数据的交互; 控件最终体现在界面上的样式是靠重写父类的Render方法来实现的 |
- 什么是Code-Behind技术?
答案 |
字面意思就是:代码在后面,也就是代码隐藏的意思。 主要是通过aspx页面指向对应的CS文件,可以实现显示逻辑和处理逻辑的分离,这样做有别于以前的asp页面和代码全混在一起不容易后期的修改和维护,使用code behind更容易维护,美工和程序员可以很好的分工 |
- 说明.net中的错误处理机制
答案 |
异常处理有两种方法:一种是使用Try Catch处理,一种使用throw扔出 |
- 列举一种适合asp.net应用开发的分层结构,介绍每层的作用
答案 |
1)表现层 显示数据和接受输入 2)业务逻辑层 用于进行业务数据的处理 3)数据访问层 用于访问数据 4)实体层 用于封装数据传递的对象 |
- net的身份验证方式有哪些?分别是什么原理?
答案 |
Windows身份验证,基于Windows系统的用户的认证 Forms身份验证,基于Form表单的认证 |
- 请详述在dotnet中类(class)与结构(struct)的异同?
答案 |
Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.Class可以被继承,struct不可以被继承 |
- 常用的调用WebService的方法有哪些?
答案 |
手动建立Web服务代理, 利用开发环境建立Web服务代理 |
- 在net中读取XML文件要用到那些包,类,方法?
答案 |
System.Xml命名空间包含了一些最重要的XML类,其中最主要的类是和XML文档的读写操作相关的类。这些类中包括4个与读相关的类以及2个与写相关的类。它们分别是:XmlReader、XmlTextReader、XmlValidatingReader、XmlNodeReader、XmlWriter以及 XmlTextWriter。 XmlReader类是一个虚基类,它包含了读XML文档的方法和属性。该类中的Read方法是一个基本的读XML文档的方法,它以流形式读取XML文档中的节点(Node)。另外,该类还提供了ReadString、ReadInnerXml、ReadOuterXml和ReadStartElement等更高级的读方法。除了提供读XML文档的方法外,XmlReader类还为程序员提供了MoveToAttribute、MoveToFirstAttribute、MoveToContent、MoveToFirstContent、MoveToElement以及 MoveToNextAttribute等具有导航功能的方法。 XmlTextReader、XmlNodeReader以及XmlValidatingReader等类是从XmlReader类继承过来的子类。根据它们的名称,我们可以知道其作用分别是读取文本内容、读取节点和读取XML模式(Schemas)。 XmlWriter类为程序员提供了许多写XML文档的方法,它是XmlTextWriter类的基类,我在后面的实例中会给出相关的运用方法。 XmlNode类是一个非常重要的类,它代表了XML文档中的某个节点。该节点可以是XML文档的根节点,这样它就代表整个XML文档了。它是许多很有用的类的基类,这些类包括插入节点的类、删除节点的类、替换节点的类以及在XML文档中完成导航功能的类。同时,XmlNode类还为程序员提供了获取双亲节点、子节点、最后一个子节点、节点名称以及节点类型等的属性。它的三个最主要的子类包括:XmlDocument、XmlDataDocument以及XmlDocumentFragment。XmlDocument类代表了一个XML文档,它提供了载入和保存XML文档的方法和属性。这些方法包括了Load、LoadXml和Save等。同时,它还提供了添加特性(Attributes)、说明(Comments)、空间(Spaces)、元素(Elements)和新节点(New Nodes)等XML项的功能。XmlDocumentFragment类代表了一部分XML文档,它能被用来添加到其他的XML文档中。XmlDataDocument类可以让程序员更好地完成和ADO.NET中的数据集对象之间的互操作。 |
- 什么是强类型系统?
答案 |
RTTI:类型识别系统。 |
二、 程序题(前6题每题5分,第7题10分。共40分)
1. 公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路。
答案 |
根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。 |
2. 根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
namespaceTest
{
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 ) |
3. 仔细阅读下列代码
using System;
class A
{
public A()
{
PrintFields();
}
//类中定义了一个虚方法
public virtual void PrintFields(){}
}
//类B继承自类A
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 |
4. 写出程序的输出结果
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);
}
}
答案 |
(考查值引用和对象引用) |
5. 用socket实现服务器端向客户端传递几个字符,在客户端输出
答案 |
Using System.Net.Sockets; //启动监听 TcpListener objLsn = new TcpListener(1000); objLsn.Start(); Socket objSocket = objLsn.AcceptSocket(); //发送 String msg = “测试发送”; Byte[] arr = System.Text.Encoding.Default.GetBytes(msg); objSocket.Send(arr); 参考:WinForm第八章Socket编程 |
6. 写出程序的输出结果
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();
}
}
答案 |
A |
7. 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求: 1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
答案 |
要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
设计方法二: 使用event -- delegate设计.. } |