我爱Aspx >> Asp.Net >> 实例解析C++/CLI中的继承与枚举本文中,将要介绍与继承相关的C++/CLI主题,并以现实生活中银行交易的三种形式:存款、取款、转账,来说明类的继承体系,且以一种新的枚举形式来实现。
枚举器请看例1中声明的类型,它存在于其自身的源文件中,并编译为一个只包含此类型的程序集:
例1:
| public enum class TransactionType : unsigned char {Deposit, Withdrawal, Transfer}; |
与想像的一样,枚举器中的Deposit、Withdrawal、Transfer分别代表0、1、2的常量值,但有三个方面却让这个enum类型与标准C++的enum类型(也就是"本地enum")大不相同。
·enum类只用于取代enum。这使TransactionType成为了一个CLI enum。(也允许enum结构,其与enum类等价。)
·此类型的可访问性为public,以使其可从父类程序集外可见。(在C++/CLI中,一个本地enum类型也能有一个访问限定符。)
·enum类有一个显式的基本类型限定符:在本例中为unsigned char。(在C++/CLI中,一个本地enum也能有一个基本类型。)默认情况下,基本类型为int。基本类型也能为bool或除wchar_t之外的任意整形。(如果指定bool为基本类型,枚举器必须显式地进行初始化,因为没有默认的初始值。)
支持这个新语法的原因是CLI enum遵从CLS标准,而本地enum却不遵从。
CLI enum与本地enum间最大的区别在于构成方式上,枚举名的作用范围由它的父类enum类型来限定。另外,标准C++中定义的整数提升,并不适用于CLI enum。
与本地enum类似,一个CLI enum也能被定义在一个类中,在这种情况下,就不允许使用访问限定符了,因为嵌套类型的可见性,已被其嵌入到的类型可见性所取代。
交易的抽象基类交易类型的继承体系在基类Transaction中,默认从System::Object继承,见例2:
例2:
| using namespace System;using namespace System::Threading;/*1*/public ref class Transaction abstract{ TransactionType typeOfTransaction; /*2*/ DateTime dateTimeOfTransaction; public: /*3a*/ property TransactionType TypeOfTransaction { TransactionType get() { return typeOfTransaction; } private: void set(TransactionType value) { typeOfTransaction = value; }}/*3b*/ property DateTime DateTimeOfTransaction{ DateTime get() { return dateTimeOfTransaction; } private: void set(DateTime value) { dateTimeOfTransaction = value; }}/*4*/ virtual void PostTransaction() abstract;protected:/*5*/ Transaction(TransactionType transType){ /*6*/ Thread::Sleep((gcnew Random)->Next(1000,2001)); /*7*/ TypeOfTransaction = transType; /*8*/ DateTimeOfTransaction = DateTime::Now;}}; |
实例解析C++/CLI中的接口与泛型[03-16]
病毒及流氓软件自我复制的简单实..[03-16]
微软软件开发技术二十年回顾[03-16]
“不完美”的VS 2005 Team Syste..[03-16]
实例解析C++/CLI中的继承与枚举[03-16]
实例解析C++/CLI中的接口与泛型[03-16]
ASP.NET移动开发之SelectionList..[03-16]
ASP.NET 2.0移动开发之列表控件[03-16]
ASP.NET 2.0中保证应用程序的安全[03-16]
在C#中建立复杂的、灵活的SQL查询..[03-16]