本文示例源代碼或素材下載
一. 結(jié)構(gòu)(Structure)
什么是結(jié)構(gòu)(Structure)?在C#里,Struct是一種值類(lèi)型,通常用來(lái)封裝小型相關(guān)變量組,和類(lèi)有很大的相似度.同類(lèi)一樣,它不但可以包含不同數(shù)據(jù)類(lèi)型數(shù)據(jù),。還可以包含復(fù)合類(lèi)型(數(shù)組,結(jié)構(gòu),DateTime等等)除了以名字/值方式出現(xiàn)還可以有屬性和方法,所以說(shuō)結(jié)構(gòu)是一種強(qiáng)大的復(fù)合型數(shù)據(jù),。
1. 使用類(lèi)封裝對(duì)象的屬性
以圖書(shū)來(lái)作為示例來(lái)分析,圖書(shū)包括圖書(shū)編號(hào),圖書(shū)名稱(chēng),圖書(shū)作者以及出售價(jià)格等.我們平時(shí)所通常都是使用類(lèi)來(lái)封裝這些信息,如下:
1/**//// <summary>
2/// 圖書(shū)對(duì)象
3/// </summary>
4public class Books
5{
6 public int bookId;
7 public string bookName;
8 public string bookAuthor;
9 public double bookPrice;
10}
2. 使用結(jié)構(gòu)封裝對(duì)象的屬性
其實(shí)出了使用類(lèi)來(lái)封裝,我們還可以使用結(jié)構(gòu)來(lái)封裝,實(shí)現(xiàn)如下:
1/**//// <summary>
2/// 使用結(jié)構(gòu)封裝圖書(shū)信息
3/// </summary>
4public struct Book
5{
6 public int bookId;
7 public string bookName;
8 public string bookAuthor;
9 public double bookPrice;
10}
3. 結(jié)構(gòu)可以定義構(gòu)造方法
1/**//// <summary>
2/// 使用結(jié)構(gòu)封裝圖書(shū)信息
3/// </summary>
4public struct Book
5{
6 /**//// <summary>
7 /// 可定義構(gòu)造方法
8 /// </summary>
9 public Book()
10 {
11 //
12 }
13
14 public int bookId;
15 public string bookName;
16 public string bookAuthor;
17 public double bookPrice;
18}
4. 可以使用new進(jìn)行初始化
1/**//// <summary>
2/// 使用結(jié)構(gòu)封裝圖書(shū)信息
3/// </summary>
4public struct Book
5{
6 /**////// <summary>
7 ///// 可定義構(gòu)造方法
8 ///// </summary>
9 //public Book()
10 //{
11 // //這里需要注意,,當(dāng)結(jié)構(gòu)中已有帶參數(shù)的構(gòu)造方法時(shí),,則不能定義無(wú)參數(shù)的構(gòu)造方法
12 //}
13
14 public Book(int id, string name, string author, double price)
15 {
16 bookId = id;
17 bookName = name;
18 bookAuthor = author;
19 bookPrice = price;
20 }
21 public int bookId;
22 public string bookName;
23 public string bookAuthor;
24 public double bookPrice;
25}
5. 結(jié)構(gòu)可以實(shí)現(xiàn)接口
1/**//// <summary>
2/// 接口
3/// </summary>
4public interface IBook
5{
6 DataSet QueryAll();
7}
8
9/**//// <summary>
10/// 結(jié)構(gòu)實(shí)現(xiàn)接口
11/// </summary>
12public struct BookComponent : IBook
13{
14 public DataSet QueryAll()
15 {
16 return null;
17 }
18}
6. 類(lèi)和結(jié)構(gòu)的區(qū)別
從上面可以看出,無(wú)論是使用類(lèi)還是結(jié)構(gòu),都可以用來(lái)封裝對(duì)象的屬性.當(dāng)然出了相同點(diǎn)外,兩者之間還是有很大的不同,大體如下:
類(lèi)型:類(lèi)是引用類(lèi)型,,結(jié)構(gòu)是值類(lèi)型.
繼承:類(lèi)可繼承,結(jié)構(gòu)不能繼承.結(jié)構(gòu)不能繼承其他的結(jié)構(gòu)和類(lèi),或是被用作其他結(jié)構(gòu)或類(lèi)的基類(lèi).
構(gòu)造方法與析夠函數(shù):結(jié)構(gòu)可以定義構(gòu)造方法,但不能定義析夠函數(shù).類(lèi)既可以定義構(gòu)造方法,也可定義析夠函數(shù).
對(duì)象創(chuàng)建:可以使用new進(jìn)行初始化,,或進(jìn)行手工初始化.類(lèi)和結(jié)構(gòu)都可以.
結(jié)構(gòu)與接口:結(jié)構(gòu)可以實(shí)現(xiàn)一個(gè)或多個(gè)接口. 如上:public struct BookComponent:IBook{ //....}.
多態(tài): 結(jié)構(gòu)與接口之間是支持多態(tài)的.如上面的結(jié)構(gòu)實(shí)現(xiàn)接口為例,多態(tài):IBook book = new BookComponent();
二. 枚舉(Enumeration)
什么是枚舉(Enumeration)?枚舉可以理解為通過(guò)預(yù)定義列出所有值的標(biāo)識(shí)符來(lái)定義一個(gè)有序集合,這些值的次序和枚舉說(shuō)明中的標(biāo)識(shí)符的次序一致的. 通常用于定義一些不變的序列,如一年四個(gè)季節(jié),一禮拜為七天等等. 可以通過(guò)enum來(lái)定義(這里主要是針對(duì)C#語(yǔ)言的實(shí)現(xiàn),其實(shí)在JAVA語(yǔ)言里也是通過(guò)enum來(lái)定義).
1. 枚舉的定義形式
修飾符 enum 枚舉名
{
標(biāo)識(shí)符1,
標(biāo)識(shí)符2,
..........,
標(biāo)識(shí)符n
}
如下則為一個(gè)完整的枚舉定義:
1/**//// <summary>
2/// 技術(shù)方向
3/// </summary>
4public enum TechnologyDirection
5{
6 CPlusPlus程序員,
7 Java程序員,
8 DotNet程序員,
9 架構(gòu)設(shè)計(jì)師,
10 開(kāi)發(fā)組長(zhǎng),
11 需求分析師
12}
2. 另類(lèi)枚舉定義(可以初始化值)
1==============以下為第一種定義方法==============
2/**//// <summary>
3/// 季節(jié)
4/// </summary>
5public enum Season
6{
7 SPRING, //春天
8 SUMMER, //夏天
9 AUTUMN, //秋天
10 WINTER //冬天
11}
12==============以下為第二種定義方法==============
13/**//// <summary>
14/// 季節(jié)
15/// </summary>
16public enum SeasonTwo
17{
18 SPRING = 0, //春天
19 SUMMER = 1, //夏天
20 AUTUMN = 2, //秋天
21 WINTER = 3 //冬天
22}
23=================TEST===================
24class Program
25{
26 static void Main(string[] args)
27 {
28 //以上兩種定義方法效果都一樣
29 Console.WriteLine(Season.AUTUMN);
30 Console.WriteLine(SeasonTwo.AUTUMN);
31 //運(yùn)行結(jié)果都為:AUTUMN
32 }
33}
如果不初始化值則從0開(kāi)始,實(shí)際上面兩種定義方式定義得到的都是一個(gè)效果.
3. 對(duì)象的形式實(shí)現(xiàn)
何為對(duì)象的形式實(shí)現(xiàn)呢? 其實(shí)這個(gè)很簡(jiǎn)單,也就是將需要枚舉的標(biāo)識(shí)定義在對(duì)象里,通過(guò)對(duì)象的特性將其封裝.詳細(xì)如下代碼:
1public class SeasonOne
2{
3 public static readonly SeasonOne SPRING = new SeasonOne("春天");
4 public static readonly SeasonOne SUMMER = new SeasonOne("夏天");
5 public static readonly SeasonOne AUTUMN = new SeasonOne("秋天");
6 public static readonly SeasonOne WINTER = new SeasonOne("冬天");
7
8 public SeasonOne(string name)
9 {
10 this.name = name;
11 }
12
13 //成員
14 private string name;
15 public string Name
16 {
17 get { return name; }
18 set { name = value; }
19 }
20}
以上的形式實(shí)現(xiàn)很簡(jiǎn)單, 不過(guò)好象已經(jīng)偏離了"枚舉(enum)",因?yàn)閷?shí)現(xiàn)已經(jīng)由枚舉轉(zhuǎn)向?yàn)榱祟?lèi)(class)對(duì)象來(lái)實(shí)現(xiàn)了.定義一成員屬性,通過(guò)構(gòu)造方法初始化,在類(lèi)里定義需要枚舉的只讀成員,通常不建議使用此方式來(lái)實(shí)現(xiàn). 我們可以這樣來(lái)測(cè)試:
1class Program
2{
3 static void Main(string[] args)
4 {
5 Console.WriteLine(SeasonOne.AUTUMN.Name);
6 //運(yùn)行結(jié)果:秋天
7 }
8}
4. Java中的枚舉
在與C#語(yǔ)言一樣流行的JAVA中,枚舉還存在著另類(lèi)故事,作為一個(gè)面向?qū)ο蟮拈_(kāi)發(fā)者或是既將成為面向?qū)ο蟮拈_(kāi)發(fā)者的你,我想了解下另類(lèi)語(yǔ)言的某些特性是有必要的.在JAVA中,枚舉除了上面所介紹的相關(guān)功能外,還有其他的一些功能,下面將簡(jiǎn)單的介紹下這些功能的應(yīng)用.
枚舉里定義抽象方法,標(biāo)識(shí)符實(shí)現(xiàn)抽象方法
1enum Operator{
2 ADD {
3 public double calculate(double a,double b){
4 return a+b;
5 }
6 },
7 SUBSTRACT{
8 public double calculate(double a,double b){
9 return a-b;
10 }
11 },
12 MULTIPLY{
13 public double calculate(double a,double b){
14 return a*b;
15 }
16 },
17 DIVIDE{
18 public double calculate(double a,double b){
19 return a/b;
20 }
21 };
22 public abstract double calculate(double a,double b);
23}
枚舉里定義屬性字段和構(gòu)造方法
1enum Course{
2 COREJAVA("zhangsan"), //zhangsan學(xué)CoreJava
3 WEB("lisi"), //lisi學(xué)Web
4 EJB ("wangwu"); //wangwu學(xué)EJB
5
6 String name;
7 Course(String name){
8 this.name=name;
9 }
10 public String getName(){
11 return this.name;
12 }
13}
屬性字段,構(gòu)造方法及抽象方法并存
enum Course{
COREJAVA("zhangsan"){
public void study(){
System.out.println("Study Corejava");
}
},
WEB("lisi"){
public void study(){
System.out.println("Study Web");
}
},
EJB ("wangwu"){
public void study(){
System.out.println("Study EJB");
}
};
String teachName;
Course(String name){
this.teachName=name;
}
public String getName(){
return this.teachName;
}
public abstract void study();
}
三. .NET Framework中的枚舉基類(lèi)
在.NET Framework中枚舉基類(lèi)(Enum)是一抽象類(lèi),位于System命名空間下,繼承了ValueType類(lèi)和IComparable, IFormattable, IConvertible接口,這里以一個(gè)簡(jiǎn)單的文本編輯作為示例介紹下枚舉在實(shí)際中的應(yīng)用.
簡(jiǎn)單文本編輯器示例運(yùn)行圖如下:
從上圖很容易看出,此文本編輯器主要是用于設(shè)置字體樣式,其實(shí)在實(shí)現(xiàn)這個(gè)簡(jiǎn)單文本編輯器的時(shí)候就是使用的字體樣式枚舉(FontStyle),FontStyle的源代碼定義如下:
1// 摘要:
2// 指定應(yīng)用到文本的字形信息,。
3[Flags]
4public enum FontStyle
5{}{
6 // 摘要:
7 // 普通文本。
8 Regular = 0,
9 //
10 // 摘要:
11 // 加粗文本,。
12 Bold = 1,
13 //
14 // 摘要:
15 // 傾斜文本,。
16 Italic = 2,
17 //
18 // 摘要:
19 // 帶下劃線的文本。
20 Underline = 4,
21 //
22 // 摘要:
23 // 中間有直線通過(guò)的文本,。
24 Strikeout = 8,
25}
要實(shí)現(xiàn)上圖示的簡(jiǎn)單文本編輯器很簡(jiǎn)單,基本思路就是通過(guò)點(diǎn)擊上面字體樣式設(shè)置功能鍵,設(shè)置編輯區(qū)域的文本字體樣式,這實(shí)現(xiàn)很簡(jiǎn)單.在此,我就直接把代碼貼出來(lái),有不清楚之處可從下面我提供的示例代碼下載連接下載本文示例代碼查看.
1private void SetStyle(object sender,EventArgs e)
2{}{
3 ToolStripButton btn = sender as ToolStripButton;
4 FontStyle fontStyleContent = this.rchTxtContent.SelectionFont.Style;
5 FontStyle BtnFont = ( FontStyle)(Enum.Parse(typeof(FontStyle),btn.Tag.ToString()));
6 if ((fontStyleContent | BtnFont) == fontStyleContent)
7 {
8 fontStyleContent = ~BtnFont & fontStyleContent;
9 }
10 else
11 {}{
12 fontStyleContent = fontStyleContent | BtnFont;
13 }
14 this.rchTxtContent.SelectionFont = new Font(this.rchTxtContent.SelectionFont.FontFamily,
15 this.rchTxtContent.SelectionFont.Size,
16 fontStyleContent,
17 this.rchTxtContent.SelectionFont.Unit);
18}
本文就介紹于此,更多請(qǐng)關(guān)注本系列后續(xù)文章
出處:http://beniao.cnblogs.com/