首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

工厂模式下,怎么让子类继承基类中的 枚举 类型

2012-03-28 
工厂模式下,如何让子类继承基类中的 枚举 类型?基类:publicabstractclassUser{//抽象的用户级别,不管子类

工厂模式下,如何让子类继承基类中的 枚举 类型?
基类:
public   abstract   class   User
        {
                //抽象的用户级别,不管子类是什么,总会存在以下用户:
                [Description( "用户级别 ")]
                public   enum   UserLevel
                {
                        [Description( "老板 ")]
                        Boss,
                        [Description( "系统管理员 ")]
                        Admin
                }
           
                ......
        }

子类:
public   abstract   class   CompanyUser   :   User
        {
                //继承的用户级别,子类是公司,存在以下用户:
                [Description( "用户级别 ")]
                public   enum   UserLevel
                {
                        [Description( "默认用户 ")]
                        Normal,
                        [Description( "报表用户 ")]
                        Reporter,
                        [Description( "主管 ")]
                        Director,
                        [Description( "经理 ")]
                        Manager,
                        [Description( "财务人员 ")]
                        Accountant,
                        [Description( "财务经理 ")]
                        AccountantManager,
                        [Description( "老板 ")]
                        Boss,
                        [Description( "系统管理员 ")]
                        Admin
                }

                ......
        }


现在的问题是enum类型不能标记为abstract或virtual的,那我如何实现用子类的UsersLevel替换基类的UsersLevel?
换句话说,如何实现以下的代码:

User   user   =   new   CompanyUser();   //这句当然没错


user.UserLevel   =   CompanyUser.UserLevel.AccountantManager;   //这句编译不通过!

[解决办法]
相同定义的枚举只会有一份,如果有了第二份,即使定义相同,但会因为在不同的作用区域下变成两个完全不同的枚举。

换句话说,基类的枚举不能被子类继承,只能使用基类的现成的枚举。
[解决办法]
为何要把枚举放在类内部?

拿出来不是更好?
[解决办法]
在外定义较好 或者单独定义一个静态类

热点排行