工厂模式下,如何让子类继承基类中的 枚举 类型?
基类:
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; //这句编译不通过!
[解决办法]
相同定义的枚举只会有一份,如果有了第二份,即使定义相同,但会因为在不同的作用区域下变成两个完全不同的枚举。
换句话说,基类的枚举不能被子类继承,只能使用基类的现成的枚举。
[解决办法]
为何要把枚举放在类内部?
拿出来不是更好?
[解决办法]
在外定义较好 或者单独定义一个静态类