【c#技術(shù)】第6章 其它常用數(shù)據(jù)類型

? 字符串類型的定義與使用
? 枚舉類型的定義與使用
? 委托類型的定義與使用
? 裝箱與拆箱的概念
6.1 循序漸進(jìn)學(xué)理論
6.1.1 字符串類型
1.字符串的種類及其定義
(1)規(guī)則字符串
[格式]:string字符串變量名[=字符串初值];
(2)逐字字符串
逐字字符串由@字符后跟雙引號(hào)括起來的零個(gè)或多個(gè)字符組成。
[格式]:string字符串變量名[=@字符串初值];

【例6-1】觀察下列程序的執(zhí)行結(jié)果。
[程序代碼]
usingSystem;
classA_6_1
{ public static void Main()
{ ?string str1="你是\"王三\"?"; ? //“\\"”是轉(zhuǎn)義字符
string str2="星期一\\星期二\\星期三"; ? ?//“\\”是轉(zhuǎn)義字符
string str3="你好!\t王三。"; ?//“\t”是轉(zhuǎn)義字符
string str4=@"你好\t王三\?"; ? //\t并不看成轉(zhuǎn)義字符,而是看成兩個(gè)字符
string str5=@"星期一\\星期二\\星期三"; ? // \\也不是轉(zhuǎn)義字符,而是看成兩個(gè)“\”
Console.WriteLine("str1={0},str2={1},str3={2}",str1,str2,str3);
Console.WriteLine("str3={0},str4={1}",str4,str5);
}
}
[執(zhí)行結(jié)果]

2.字符串類型的使用

【例6-3】編寫一個(gè)Windows應(yīng)用程序,程序的設(shè)計(jì)界面如圖6-1所示,程序的運(yùn)行界面如圖6-2所示。程序執(zhí)行時(shí)在第一個(gè)文本框中輸入一個(gè)字符串,然后按【倒置】按鈕將把輸入的字符串反序顯示在第二個(gè)文本框中。


3.字符串中單個(gè)字符的訪問
例如,有以下語句:
stringstr1="I am a teacher."//定義一個(gè)字符串并賦初值
charc;//定義一個(gè)字符變量
c=str1[0];//給字符變量賦一個(gè)字符,該字符為str1字符串的第一個(gè)字符
語句執(zhí)行后,字符變量c的值為'I'。
【例6-4】 編寫一個(gè)程序,用來統(tǒng)計(jì)用戶輸入的字符串中字母個(gè)數(shù)、數(shù)字個(gè)數(shù)和其它字符個(gè)數(shù)。程序的設(shè)計(jì)界面如圖6-3所示,程序的運(yùn)行界面如圖6-4所示。


6.1.2 結(jié)構(gòu)類型
在C++和C#中,結(jié)構(gòu)類型是對(duì)同一類具有某些特定屬性和功能的對(duì)象的抽象定義,其定義中可以包括構(gòu)造函數(shù)、析構(gòu)函數(shù)、成員變量、成員函數(shù)、成員屬性等等,同C#中的類類型基本相同。
但結(jié)構(gòu)類型與類類型畢竟是兩種不同的類型,主要不同點(diǎn)體現(xiàn)在以下兩個(gè)方面。
(1)存儲(chǔ)值的不同
結(jié)構(gòu)類型是值類型,而類類型是引用類型。
(2)參數(shù)傳遞不同
[格式]:struct結(jié)構(gòu)型名
{
成員聲明;
}
例如:
structstudent
{ public string name;
public int age;
}
實(shí)際上程序中使用的不是結(jié)構(gòu)型,而是根據(jù)結(jié)構(gòu)型聲明的結(jié)構(gòu)型變量,根據(jù)結(jié)構(gòu)型聲明結(jié)構(gòu)型變量的格式如下。
[格式]:結(jié)構(gòu)型名 結(jié)構(gòu)型變量名;
例如有以下語句:
studentstu;
就是創(chuàng)建了一個(gè)名為stu的結(jié)構(gòu)型變量。
在程序中經(jīng)常需要訪問結(jié)構(gòu)型變量的成員,訪問方法如下。
結(jié)構(gòu)型變量名.成員名;
如要給stu的age成員賦值15,可使用如下語句:
stu.age=15;
【例6-5】 編程實(shí)現(xiàn)從鍵盤上輸入一個(gè)學(xué)生的學(xué)號(hào)、姓名和年齡,然后輸出剛剛輸入的學(xué)生學(xué)號(hào)、姓名和年齡。
6.1.3 枚舉類型
[格式]:[枚舉修飾符]enum 枚舉類型名 {枚舉常量1,枚舉常量2,…,枚舉常量n};
定義枚舉變量的語句格式如下:
枚舉類型名 變量名;
如果希望讓枚舉型常量的值是其它類型的,可在定義枚舉型時(shí)指定,定義格式與如下。
[格式]:[枚舉修飾符]enum 枚舉類型名: 類型說明符{枚舉常量1,枚舉常量2,…,枚舉常量n};
【例6-6】 定義一個(gè)職稱枚舉類型,輸出枚舉類型中所有枚舉常量的值。
6.1.4 委托類型
一個(gè)委托聲明定義了一個(gè)從類System.Delegate延伸的類。一個(gè)委托實(shí)例封裝一個(gè)方法及可調(diào)用的實(shí)體。在聲明委托時(shí)只需要指定委托指向的函數(shù)原型的類型,它不能有返回值也不能帶有輸出類型的參數(shù)。委托類型的定義格式如下。
[格式]:delegate數(shù)據(jù)類型說明符 委托類型名();
例如,若要聲明一個(gè)指向double類型函數(shù)原型的委托類型,可使用如下語句:
delegatedouble MyDelegate();
委托既可以封裝一個(gè)靜態(tài)方法也可以封裝一個(gè)非靜態(tài)的方法。委托的使用方法,一般分為二步:
(1)定義一個(gè)委托類型的實(shí)例變量,讓該實(shí)例變量指向某一個(gè)具體的方法。其一般格式如下。
[格式]:委托類型名 委托變量名=new 委托類型名(方法名);
(2)調(diào)用委托類型變量指向的方法。其一般格式如下。
[格式]:委托變量名(實(shí)參列表);
6.1.5 裝箱與拆箱
1.裝箱
所謂裝箱就是將一個(gè)值類型隱式地轉(zhuǎn)換成一個(gè)object類型或一個(gè)被該值類型應(yīng)用的接口類型。裝箱的方法是:創(chuàng)建一個(gè)object實(shí)例并將值復(fù)制給這個(gè)object實(shí)例。例如:
double f=23.0;
objectobj=f;
也可以用顯式的方法來進(jìn)行裝箱操作,語句如下:
double f=23.0;
objectobj=(object)f;
2.拆箱
拆箱是裝箱的反操作。所謂拆箱就是將一個(gè)對(duì)象類型顯式地轉(zhuǎn)換成一個(gè)值類型,或?qū)⒁粋€(gè)接口類型顯式地轉(zhuǎn)換成一個(gè)執(zhí)行該接口的值類型。例如:
doublef=23.0;
objectobj=f;
doublek=(double)obj;
6.2 典型實(shí)例練能力
6.2.1 典型實(shí)例一:回文字符串的判定
【實(shí)例題目】
編寫一個(gè)應(yīng)用程序,用來判斷用戶輸入的字符串是否為回文,所謂回文就是正讀和反讀均一樣的字符串。如“abcddcba”、“我是兵兵是我”均是回文,而“abcdefgh”則不是回文。程序的設(shè)計(jì)界面如圖6-5所示,程序的運(yùn)行界面如圖6-6所示。



6.3 上機(jī)練習(xí)重應(yīng)用
6.3.1 上機(jī)練習(xí)一:從字符串中分離出數(shù)字字符
【練習(xí)題目】
編寫一個(gè)程序,把在一個(gè)文本框中輸入的字符串中的數(shù)字字符分離出來,然后顯示在另一個(gè)文本框中。程序的設(shè)計(jì)界面如圖6-8所示,程序的運(yùn)行界面如圖6-9所示。


