Csharp+Asp.net系列圖文說(shuō)明教程(6)
發(fā)表時(shí)間:2024-02-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本教程參考C#和ASP.NET程序設(shè)計(jì)教程撰寫(xiě),有什么不足之處請(qǐng)大家指出,或在老貓的理想BLOG留言。 好些天不寫(xiě)了。今天事情較少,有幾個(gè)網(wǎng)友總是問(wèn),就又寫(xiě)了點(diǎn)東西?赡苁杪┍容^多,希望大家?guī)兔χ刚? 預(yù)處理指令:與c++不同,c#沒(méi)有獨(dú)立的預(yù)處理器。在c#中,預(yù)處理指令并不是編譯器開(kāi)始編譯...
本教程參考C#和ASP.NET程序設(shè)計(jì)教程撰寫(xiě),有什么不足之處請(qǐng)大家指出,或在老貓的理想BLOG留言。
好些天不寫(xiě)了。今天事情較少,有幾個(gè)網(wǎng)友總是問(wèn),就又寫(xiě)了點(diǎn)東西?赡苁杪┍容^多,希望大家?guī)兔χ刚?br>
預(yù)處理指令:與c++不同,c#沒(méi)有獨(dú)立的預(yù)處理器。在c#中,預(yù)處理指令并不是編譯器開(kāi)始編譯代碼之前的一個(gè)單獨(dú)的處理步驟,而是作為詞法分析的一部分來(lái)執(zhí)行的。預(yù)處理指令都以#號(hào)開(kāi)頭并位于行首。
#define指令用于定義符合,他的作用域是該定義所在的整個(gè)文件,符號(hào)定義必須放在所有其他語(yǔ)句的前面,或者說(shuō)在所有“實(shí)代碼(real code)”之前。(比如:"using system"就是實(shí)代碼。)
想取消某個(gè)符號(hào)的定義,則要用到#undef指令。
條件編譯指令有4個(gè):#if、#elif、#else、#endif,他們用來(lái)有條件地將部分程序代碼包括進(jìn)來(lái)或排除在外。條件編譯指令和if語(yǔ)句有類(lèi)似的作用。也可以在條件編譯指令中用邏輯與(&&)、邏輯或( )、等于(==)、不等于(!=)等操作符。
eg:
#define MF1
#define MF2
using System;
public class MikeCat
{
public static void Main()
{
#if (MF1&&!MF2)
Console.WriteLine("MF1被定義");
#elif(!MF1&&MF2)
Console.WriteLine("MF2被定義");
#elif(MF1&&MF2)
Console.WriteLine("MF1和MF2被定義");
#else
Console.WriteLine("MF1和MF2沒(méi)被定義");
#endif
}
}//運(yùn)行結(jié)果:MF1和MF2被定義
#error和#warning指令用于發(fā)出編譯錯(cuò)誤和警告。
eg:
#define MF1
#define MF2
using System;
public class MikeCat
{
public static void Main()
{
#if MF1
#warning 歡迎來(lái)到老貓的理想!
#endif
#if MF2
#error 老貓的理想BLOG出錯(cuò)
#endif
}
}//運(yùn)行結(jié)果:test.cs(9,17): warning CS1030: #warning:“歡迎來(lái)到老貓的理想!”
//test.cs(12,15): error CS1029: #error:“老貓的理想BLOG出錯(cuò)”
#line指令用于修改編譯器行號(hào)及文件名
eg:
using System;
public class MikeCat
{
public static void Main()
{
#line 66 "mfblog.cs" //將編譯行號(hào)設(shè)為66并將文件名改名為mfblog.cs
intt i=1;
Console.WriteLine("i的值是{0}",i);
}
}//運(yùn)行結(jié)果:mfblog.cs(66,6): error CS0246: 找不到類(lèi)型或命名空間名稱(chēng)“intt”(是否缺少 using指令或程序集引用?)
//mfblog.cs(67,34): error CS0103: 名稱(chēng)“i”在類(lèi)或命名空間“MikeCat”中不存在
異常處理:在c#中,引發(fā)異常有兩種狀況,第一種:在程序中使用throw語(yǔ)句,立即無(wú)條件引發(fā)一個(gè)異常。第二種情況是c#語(yǔ)句或表達(dá)式在執(zhí)行過(guò)程中激發(fā)了某個(gè)異常的條件,從而使得操作無(wú)法正常結(jié)束,從而引發(fā)異常。
在c#中,異常是由try語(yǔ)句來(lái)處理。try語(yǔ)句提供了一種機(jī)制來(lái)捕捉程序過(guò)程中引發(fā)的異常。try有三種可能的結(jié)構(gòu),即:try-catch try-finally try-catch-finally
try-catch結(jié)構(gòu):try子句后跟一個(gè)或多個(gè)catch子句。如果執(zhí)行try子句中的語(yǔ)句時(shí)引發(fā)了異常,那么程序?qū)错樞虿檎业谝粋(gè)能處理該異常的catch子句,并將控制權(quán)轉(zhuǎn)移到catch子句執(zhí)行。既沒(méi)定義異常類(lèi)型,也沒(méi)定義異常變量的catch子句稱(chēng)為普通catch子句。一個(gè)try子句最多只能有一個(gè)普通catch子句,而且該子句必須排在其他catch子句的后面。
eg:
using System;
class MikeCat
{
static void mf1(string s)
{
if(s==null)
throw(new ArgumentNullException());//引發(fā)異常
}
static void mf2()
{
try
{
string s=null;
mf1(s);//調(diào)用mf()方法。由于s=null,因此會(huì)引發(fā)異常
}
catch(ArgumentNullException ex)
{
Console.WriteLine("mf2()方法中的異常:{0}",ex.Message);
throw;//再次引發(fā)
}
}
public static void Main()
{
try
{
mf2();//調(diào)用mf2()方法
}
catch(ArgumentNullException ex)
{
Console.WriteLine("Main()方法中的異常{0}",e.Message);
}
}
}//mf2()方法中的異常:值不能為空。
//Main()方法中的異常值不能為空。
try-finally結(jié)構(gòu):即try子句后跟一個(gè)finally子句。不管try子句是如何退出的(無(wú)論正常退出,還是引發(fā)異常,甚至執(zhí)行g(shù)oto break continue return語(yǔ)句退出),程序的控制權(quán)總是會(huì)被轉(zhuǎn)移到finally子句執(zhí)行。
eg:
using System;
public class MikeCat
{
public static void Main()
{
try
{
Console.WriteLine("執(zhí)行try子句");
//goto leave;//跳轉(zhuǎn)到leave標(biāo)簽
return;
}
finally
{
Console.WriteLine("執(zhí)行finally子句");
}
leave:
Console.WriteLine("執(zhí)行l(wèi)eave標(biāo)簽!");
}
}//執(zhí)行try子句執(zhí)行finally子句
try-catch-finally:即try子句后跟一個(gè)或多個(gè)catch子句及一個(gè)finally子句
eg:
using System;
class MikeCat
{
static void mf(string s)
{
if(s==null)
throw(new ArgumentNullException());//引發(fā)異常
}
public static void Main()
{
try
{
string s=null;
mf(s);//調(diào)用mf()方法,由于s=null,因此會(huì)引發(fā)異常
}
catch(ArgumentNullException ex)
{
Console.WriteLine("異常發(fā)生:{0}",ex.Message);
}
finally
{
Console.WriteLine("執(zhí)行finally子句");
}
}