構造函數是一種特殊的方法,調用它來初始化對象。構造函數的名稱總是和包含它的類名稱相同,并且從不傳回值。
構造函數分為兩類:執行個體構造函數和靜态構造函數。
執行個體構造函數用來初始化特定的對象執行個體。
靜态構造函數也稱類構造函數,在第一次使用類之前調用。
一個類可以有多個構造函數。例如,可以聲明一個不帶參數的構造函數(如 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;