C#编程利器之二:结构与枚举(Structure and enumeration)【转】

C#编程利器之二:结构与枚举(Structure and enumeration)

在上一篇文章中,介绍了类如何封装程序中的对象.而实际中,出了类可以封装对象外,结构和枚举也可以封装一些对象,本文将着重介绍结构和枚举这两个知识点的相关应用.

一. 结构(Structure)

什么是结构(Structure)?在C#里,Struct是一种值类型,通常用来封装小型相关变量组,和类有很大的相似度.同类一样,它不但可以包含不同数据类型数据。还可以包含复合类型(数组,结构,DateTime等等)除了以名字/值方式出现还可以有属性和方法,所以说结构是一种强大的复合型数据。

1. 使用类封装对象的属性

以图书来作为示例来分析,图书包括图书编号,图书名称,图书作者以及出售价格等.我们平时所通常都是使用类来封装这些信息,如下:

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 图书对象
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】public class Books
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public int bookId;
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookName;
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookAuthor;
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public double bookPrice;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

2. 使用结构封装对象的属性

其实出了使用类来封装,我们还可以使用结构来封装,实现如下:

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 使用结构封装图书信息
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】public struct Book
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public int bookId;
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookName;
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookAuthor;
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public double bookPrice;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

3. 结构可以定义构造方法

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 使用结构封装图书信息
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】public struct Book
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    /**//// <summary>
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    /// 可定义构造方法
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    /// </summary>
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public Book()
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        //C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public int bookId;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookName;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookAuthor;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public double bookPrice;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

4. 可以使用new进行初始化

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 使用结构封装图书信息
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】public struct Book
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    /**////// <summary>
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    ///// 可定义构造方法
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    ///// </summary>
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //public Book()
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //    //这里需要注意,当结构中已有带参数的构造方法时,则不能定义无参数的构造方法
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //}
C#编程利器之二:结构与枚举(Structure and enumeration)【转】
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public Book(int id, string name, string author, double price)
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        bookId = id;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        bookName = name;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        bookAuthor = author;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        bookPrice = price;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public int bookId;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookName;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string bookAuthor;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public double bookPrice;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

5. 结构可以实现接口

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 接口
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】public interface IBook
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    DataSet QueryAll();
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】}
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 结构实现接口
C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
C#编程利器之二:结构与枚举(Structure and enumeration)【转】public struct BookComponent : IBook
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public DataSet QueryAll()
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        return null;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

6. 类和结构的区别

从上面可以看出,无论是使用类还是结构,都可以用来封装对象的属性.当然出了相同点外,两者之间还是有很大的不同,大体如下:

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 类型:类是引用类型,结构是值类型.

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 继承:类可继承,结构不能继承.结构不能继承其他的结构和类,或是被用作其他结构或类的基类.

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 构造方法与析够函数:结构可以定义构造方法,但不能定义析够函数.类既可以定义构造方法,也可定义析够函数.

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 对象创建:可以使用new进行初始化,或进行手工初始化.类和结构都可以.

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 结构与接口:结构可以实现一个或多个接口. 如上:public struct BookComponent:IBook{  //....}.

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 多态: 结构与接口之间是支持多态的.如上面的结构实现接口为例,多态:IBook book = new BookComponent();

二. 枚举(Enumeration)

     什么是枚举(Enumeration)?枚举可以理解为通过预定义列出所有值的标识符来定义一个有序集合,这些值的次序和枚举说明中的标识符的次序一致的. 通常用于定义一些不变的序列,如一年四个季节,一礼拜为七天等等. 可以通过enum来定义(这里主要是针对C#语言的实现,其实在JAVA语言里也是通过enum来定义).

    

1. 枚举的定义形式

修饰符 enum 枚举名

{

标识符1,

标识符2,

..........,

标识符n

}

如下则为一个完整的枚举定义:

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 技术方向
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】public enum TechnologyDirection
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    CPlusPlus程序员,
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Java程序员,
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    DotNet程序员,
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    架构设计师,
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    开发组长,
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    需求分析师
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

2. 另类枚举定义(可以初始化值)

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】==============以下为第一种定义方法==============
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 季节
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】public enum Season
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    SPRING,   //春天
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    SUMMER,   //夏天
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    AUTUMN,   //秋天
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    WINTER    //冬天
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}
C#编程利器之二:结构与枚举(Structure and enumeration)【转】==============以下为第二种定义方法==============
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】/**//// <summary>
C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// 季节
C#编程利器之二:结构与枚举(Structure and enumeration)【转】/// </summary>
C#编程利器之二:结构与枚举(Structure and enumeration)【转】public enum SeasonTwo
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
,   //春天
,   //夏天
,   //秋天
    //冬天
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}
C#编程利器之二:结构与枚举(Structure and enumeration)【转】=================TEST===================
C#编程利器之二:结构与枚举(Structure and enumeration)【转】class Program
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】   static void Main(string[] args)
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】   C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】      //以上两种定义方法效果都一样
C#编程利器之二:结构与枚举(Structure and enumeration)【转】       Console.WriteLine(Season.AUTUMN);    
C#编程利器之二:结构与枚举(Structure and enumeration)【转】      Console.WriteLine(SeasonTwo.AUTUMN);  
C#编程利器之二:结构与枚举(Structure and enumeration)【转】      //运行结果都为:AUTUMN
C#编程利器之二:结构与枚举(Structure and enumeration)【转】   }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

如果不初始化值则从0开始,实际上面两种定义方式定义得到的都是一个效果.

3. 对象的形式实现

何为对象的形式实现呢? 其实这个很简单,也就是将需要枚举的标识定义在对象里,通过对象的特性将其封装.详细如下代码:

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】public class SeasonOne
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public static readonly SeasonOne SPRING = new SeasonOne("春天");
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public static readonly SeasonOne SUMMER = new SeasonOne("夏天");
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public static readonly SeasonOne AUTUMN = new SeasonOne("秋天");
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public static readonly SeasonOne WINTER = new SeasonOne("冬天");
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public SeasonOne(string name)
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        this.name = name;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //成员
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    private string name;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public string Name
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        get C#编程利器之二:结构与枚举(Structure and enumeration)【转】{ return name; }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        set C#编程利器之二:结构与枚举(Structure and enumeration)【转】{ name = value; }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

以上的形式实现很简单, 不过好象已经偏离了"枚举(enum)",因为实现已经由枚举转向为了类(class)对象来实现了.定义一成员属性,通过构造方法初始化,在类里定义需要枚举的只读成员,通常不建议使用此方式来实现.  我们可以这样来测试:

C#编程利器之二:结构与枚举(Structure and enumeration)【转】class Program
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    static void Main(string[] args)
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        Console.WriteLine(SeasonOne.AUTUMN.Name);
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        //运行结果:秋天
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

4. Java中的枚举

在与C#语言一样流行的JAVA中,枚举还存在着另类故事,作为一个面向对象的开发者或是既将成为面向对象的开发者的你,我想了解下另类语言的某些特性是有必要的.在JAVA中,枚举除了上面所介绍的相关功能外,还有其他的一些功能,下面将简单的介绍下这些功能的应用.

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 枚举里定义抽象方法,标识符实现抽象方法

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】enum OperatorC#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    ADD C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        public double calculate(double a,double b)C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】            return a+b;
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】        }
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    },
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    SUBSTRACTC#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        public double calculate(double a,double b)C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】            return a-b;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    },
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    MULTIPLYC#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        public double calculate(double a,double b)C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】            return a*b;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    },
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    DIVIDEC#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        public double calculate(double a,double b)C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】            return a/b;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    };
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public abstract double calculate(double a,double b);
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 枚举里定义属性字段和构造方法

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】enum CourseC#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】    COREJAVA("zhangsan"),  //zhangsan学CoreJava
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】    WEB("lisi"),           //lisi学Web
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】    EJB ("wangwu");        //wangwu学EJB
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    String name;
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Course(String name)C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】        this.name=name;
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public String getName()C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        return this.name;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

    C#编程利器之二:结构与枚举(Structure and enumeration)【转】 属性字段,构造方法及抽象方法并存

C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】enum CourseC#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    COREJAVA("zhangsan")C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        public void study()C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】            System.out.println("Study Corejava");
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    },
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    WEB("lisi")C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        public void study()C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】            System.out.println("Study Web");
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    },
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    EJB ("wangwu")C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】        public void study()C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】            System.out.println("Study EJB");
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    };
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    String teachName;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Course(String name)C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        this.teachName=name;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public String getName()C#编程利器之二:结构与枚举(Structure and enumeration)【转】{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        return this.teachName;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    public abstract void study();
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

三. .NET Framework中的枚举基类

    在.NET Framework中枚举基类(Enum)是一抽象类,位于System命名空间下,继承了ValueType类和IComparable, IFormattable, IConvertible接口,这里以一个简单的文本编辑作为示例介绍下枚举在实际中的应用.

简单文本编辑器示例运行图如下:

C#编程利器之二:结构与枚举(Structure and enumeration)【转】

从上图很容易看出,此文本编辑器主要是用于设置字体样式,其实在实现这个简单文本编辑器的时候就是使用的字体样式枚举(FontStyle),FontStyle的源代码定义如下:

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】// 摘要:
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】//     指定应用到文本的字形信息。
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】[Flags]
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】public enum FontStyle
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{C#编程利器之二:结构与枚举(Structure and enumeration)【转】}{
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    // 摘要:
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //     普通文本。
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Regular = 0,
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    // 摘要:
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //     加粗文本。
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Bold = 1,
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    // 摘要:
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //     倾斜文本。
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Italic = 2,
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    // 摘要:
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //     带下划线的文本。
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Underline = 4,
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    // 摘要:
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    //     中间有直线通过的文本。
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    Strikeout = 8,
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

要实现上图示的简单文本编辑器很简单,基本思路就是通过点击上面字体样式设置功能键,设置编辑区域的文本字体样式,这实现很简单.在此,我就直接把代码贴出来,有不清楚之处可从下面我提供的示例代码下载连接下载本文示例代码查看.

 1C#编程利器之二:结构与枚举(Structure and enumeration)【转】private void SetStyle(object sender,EventArgs e)
 2C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】{C#编程利器之二:结构与枚举(Structure and enumeration)【转】}{           
 3C#编程利器之二:结构与枚举(Structure and enumeration)【转】    ToolStripButton btn = sender as ToolStripButton;
 4C#编程利器之二:结构与枚举(Structure and enumeration)【转】    FontStyle fontStyleContent = this.rchTxtContent.SelectionFont.Style;
 5C#编程利器之二:结构与枚举(Structure and enumeration)【转】    FontStyle BtnFont = ( FontStyle)(Enum.Parse(typeof(FontStyle),btn.Tag.ToString()));
 6C#编程利器之二:结构与枚举(Structure and enumeration)【转】    if ((fontStyleContent | BtnFont) == fontStyleContent)
 7C#编程利器之二:结构与枚举(Structure and enumeration)【转】    {
 8C#编程利器之二:结构与枚举(Structure and enumeration)【转】        fontStyleContent = ~BtnFont & fontStyleContent;
 9C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    else
C#编程利器之二:结构与枚举(Structure and enumeration)【转】C#编程利器之二:结构与枚举(Structure and enumeration)【转】    {C#编程利器之二:结构与枚举(Structure and enumeration)【转】}{
C#编程利器之二:结构与枚举(Structure and enumeration)【转】        fontStyleContent = fontStyleContent | BtnFont;
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    }
C#编程利器之二:结构与枚举(Structure and enumeration)【转】    this.rchTxtContent.SelectionFont = new Font(this.rchTxtContent.SelectionFont.FontFamily, 
C#编程利器之二:结构与枚举(Structure and enumeration)【转】                                                this.rchTxtContent.SelectionFont.Size, 
C#编程利器之二:结构与枚举(Structure and enumeration)【转】                                                fontStyleContent, 
C#编程利器之二:结构与枚举(Structure and enumeration)【转】                                                this.rchTxtContent.SelectionFont.Unit);
C#编程利器之二:结构与枚举(Structure and enumeration)【转】}

注: 文章转载自: http://beniao.cnblogs.com/http://www.cnblogs.com/   作者 : Beniao

上一篇:Spring Integration


下一篇:这样就算会了PHP么?-1