为了账号安全,请及时绑定邮箱和手机立即绑定

“继承”的问题

“继承”的问题

慕姐8265434 2019-07-02 09:53:28
“继承”的问题我在一个低级别的命名空间中有一个枚举。我想在“继承”低级枚举的中间级别命名空间中提供一个类或枚举。namespace low{    public enum base    {       x, y, z   }}namespace mid{    public enum consume : low.base    {    }}我希望这是可能的,或者某种可以取代枚举消费的类,它将为枚举提供抽象层,但仍然允许该类的实例访问枚举。思想?编辑:我之所以没有在课堂上切换到Const,原因之一是我必须使用的服务需要低级别的枚举。我得到了WSDL和XSD,它们将结构定义为枚举。服务不能更改。
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

你可以通过上课实现你想要的:

public class Base{
    public const int A = 1;
    public const int B = 2;
    public const int C = 3;}public class Consume : Base{
    public const int D = 4;
    public const int E = 5;}

现在,您可以使用这些类,类似于它们是枚举时的情况:

int i = Consume.B;

更新(在你更新问题后):

如果将相同的int值赋值给现有枚举中定义的常量,则可以在枚举和常量之间进行转换,例如:

public enum SomeEnum // this is the existing enum (from WSDL){
    A = 1,
    B = 2,
    ...}public class Base{
    public const int A = (int)SomeEnum.A;
    //...}public class Consume : Base{
    public const int D = 4;
    public const int E = 5;}// where you have to use the enum, use a cast:SomeEnum e = (SomeEnum)Consume.B;


查看完整回答
反对 回复 2019-07-02
?
千万里不及你

TA贡献1784条经验 获得超9个赞

简短的回答是否定的。如果你想玩,你可以玩一点:

你总是可以这样做:

private enum Base{
    A,
    B,
    C}private enum Consume{
    A = Base.A,
    B = Base.B,
    C = Base.C,
    D,
    E}

但是,它并没有那么好,因为Base.A!=ConsumeA

不过,你总是可以这样做:

public static class Extensions{
    public static T As<T>(this Consume c) where T : struct
    {
        return (T)System.Enum.Parse(typeof(T), c.ToString(), false);
    }}

为了在基地和消费之间杂交.。

您也可以将枚举的值转换为INT,并将它们作为INT而不是enum进行比较,但这种情况也很糟糕。

扩展方法返回应该键入类型为T。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 370 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信