天天看点

【原创】ASP.NET开发 笔试题目详解系列(六)

问题十四 构造函数的概念

构造函数是一种特殊的方法,调用它来初始化对象。构造函数的名称总是和包含它的类名称相同,并且从不返回值。

构造函数分为两类:实例构造函数和静态构造函数。

实例构造函数用来初始化特定的对象实例。

静态构造函数也称类构造函数,在第一次使用类之前调用。

一个类可以有多个构造函数。例如,可以声明一个不带参数的构造函数(如 Point())和一个带参数的构造函数(如 Point(int x, int y))。

问题十五 值类型和引用类型的区别?写出 C# 的样例代码

C# 支持两种类型:"值类型"和"引用类型"。

值类型(如 char、int 和 float)、枚举类型和结构类型。

引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。

值类型与引用类型的

区别

在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。深层次的说,值类型的值在堆栈里存储,存储的是内存块。而引用类型值则是在堆里分配,通俗地讲,引用类型是指针性质的。

对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。

示例

using System;

class Class1 {

           public int Value = 0;

}

class Test {

          static void Main() {

                           int val1 = 0;

                           int val2 = val1;

                           val2 = 123;

                           Class1 ref1 = new Class1();

                           Class1 ref2 = ref1;

                           ref2.Value = 123;

                           Console.WriteLine("Values: {0}, {1}", val1, val2);

                           Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);

                           }

}

问题十六 ViewState 的作用

ViewState是asp.net中的一个特性,它用于把生成页面要用的一状态值保存在一个隐藏域中。当页面被回传到服务器时,服务器要解析,校验和应用ViewState中的数据以还原页面的控件树。ViewState是一个非常有用的特性,它能持久化客户端的状态而不用cookie或者服务器的内存。大部分的服务器控件都是用ViewState来持久化那些在页面中与用户交互的元素的状态值。例如,用以保存用于分页的当前页的页码。

问题十七 web.config Global.asax, Machine.Config 作用

Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,包含用于响应 ASP.NET 或 HttpModule 引发的

应用程序级

别事件的代码。

web.config为每个

站点级

的基于XML的配置文件,负责一些ASP.NET的安全认证,编码选择,诊断测试等ASP.NET的配置工作,为浏览器请求ASP.NET Web表单时通过 IIS处理后的第一站。

整个服务器的配置信息保存在Machine.Config文件中,它包含了运行一个ASP.NET服务器需要的所有配置信息。

问题十八 如何实现 Icomparable 接口

class 猪{

int 重量;

public int compareTo(另一头猪的对象){

         if(this.重量==另一头猪的对象.重量)

         return 0;

}

}

其实这个问题算不上问题,这是我学习ASP.NET Forum时遇到的一个疑惑,后来决定写出来。

这里需要注意的是compareTo 的Object是另一头猪

对象

。而比较的则是两头猪的

属性

(这里是重量)

下面再看一个。

         public int CompareTo(object obj)

         { //仔细看这里的参数是Object类型的东东

              if (obj == null) return 1;

              int compareOrder = ((ValueGroup)obj).SortOrder;

//int compareOrder = (ValueGroup) obj;

//如果当初这样写我就不会那么不爽了。

              if (this.SortOrder == compareOrder) return 0;

              //当然这里要改成如下格式 *_*

              //if (this.SortOrder == compareOrder.SortOrder) return 0;

              if (this.SortOrder < compareOrder) return -1;

              if (this.SortOrder > compareOrder) return 1;

              return 0;

}

问题十九  ASP.NET支持的部署机制

ASP.NET Web应用程序支持下列三种部署方案:

⑴ XCOPY部署

⑵ 利用VS.NET的“复制项目”功能部署

⑶ 使用VS.NET的“Web安装项目”部署

问题二十  ASP.NET 页面间传递参数的方法

使用QueryString

使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:

1,使用控件创建web表单(form)

2,创建可以返回表单的按钮或链接按钮

3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量

4,在保存的URL里添加QueryString参数

5,使用Response.Redirect重定向到上面保存的URL

下面的代码片断演示了如何实现这个方法:

源页面代码:

private void Button1_Click

(object sender, System.EventArgs e)

{

string url;

url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;

Response.Redirect(url);

}

目标页面代码:

private void Page_Load

(object sender, System.EventArgs e)

{

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

Label2.Text=Request.QueryString["email"];

}

使用Session变量

使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:

1,在页面里添加必要的控件

2,创建可以返回表单的按钮或链接按钮

3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里

4,使用Response.Redirect方法重定向到另一个页面

5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它

下面的代码片断演示了如何实现这个方法:

源页面代码:

private void Button1_Click

(object sender, System.EventArgs e)

{

//textbox1 and textbox2 are webform

//controls

Session["name"]=TextBox1.Text;

Session["email"]=TextBox2.Text;

Server.Transfer("anotherwebform.aspx");

}

目标页面代码:

private void Page_Load

(object sender, System.EventArgs e)

{

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

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

Session.Remove("name");

Session.Remove("email");

}

使用Server.Transfer

这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:

1,在页面里添加必要的控件

2,创建返回值的Get属性过程

3,创建可以返回表单的按钮和链接按钮

4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面

5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了

以下代码综合实现上述步骤过程的代码:

源页面代码:

把以下的代码添加到页面中

public string Name

{

get

{

return TextBox1.Text;

}

}

public string EMail

{

get

{

return TextBox2.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)

{

//create instance of source web form

WebForm1 wf1;

//get reference to current handler instance

wf1=(WebForm1)Context.Handler;

Label1.Text=wf1.Name;

Label2.Text=wf1.EMail;

}

在ASP.NET 2.0中启用了跨页面传送功能,其功能和用法在以后在做介绍!

页面之间传递值

方式1:

在接收页 的html代码里加上一行: <%@ Reference Page = "WebForm1.aspx" %>           

    WebForm1 fp=(WebForm1)Context.Handler;

    this.TextBox1.Text=fp.name;   //name 是第一页的public变量

Context  提供对整个当前上下文(包括请求对象)的访问。您可以使用此类共享页之间的信息。

方式2:GET方式

    在发送页

      public int sum=0;

           int i =int.Parse(this.TextBox1.Text)*2;

           Server.Transfer("WebForm2.aspx?sum="+i);

    接收页

        this.TextBox1.Text=Request["sum"].ToString();

    or  this.TextBox1.Text=Request.Params["sum"].ToString();

        this.TextBox1.Text=Request.QueryString["sum"];

方法3:全局变量

   发送页:

       Application["sum"]=this.TextBox1.Text;

       Server.Transfer("WebForm2.aspx");

   接收页:

       this.TextBox1.Text=(string)Application["sum"];

Application实质上是整个虚拟目录中所有文件的集合,如果想在整个应用范围内使用某个变量值,Application对象将是最佳的选择

在这里用Session[""]的方法雷同

方法4:

 发送页:

    1.定义静态变量:  public static string str="";

    2. str=this.TextBox1.Text;

       Server.Transfer("webform2.aspx");

 接收页:

    1.引入第一页的命名空间:using WebApplication1;

    2  this.TextBox1.Text=WebForm1.str;

继续阅读