【问题标题】:Interface With Class Enums [duplicate]与类枚举的接口[重复]
【发布时间】:2015-07-10 14:59:41
【问题描述】:

有没有办法与另一个类的枚举接口或继承?显然我可以将枚举移到课堂之外,但我很好奇是否可以参考:

public class deferment
{
    public enum test
    {
        test = 0,
        live
    }
}
public class defermentLog
{
    public enum test1 : deferment:test //this is where I want to reference
    {
    }
    public test1 action()
    {
        return test1.live;
    }
}

【问题讨论】:

  • 一个枚举,无论它在哪里定义,都只是一个类型。它没有绑定到实例,继承是,那么你想要完成什么?
  • 而且你不能从另一个枚举继承一个枚举,无论它们来自哪里。
  • 你看过这个吗:stackoverflow.com/a/757731/2777098
  • enum 不能从另一个enum 继承,可以使用: 运算符来定义enum 的底层类型(如charint、@ 987654329@ 等),但不能继承或“引用”另一个 enum
  • 关于您要实现的目标的上下文将在这里有所帮助。

标签: c# enums c#-5.0


【解决方案1】:

在这种情况下,是的,你可以。

namespace ConsoleTests
{
    using TestAlias = Class1.test;

    public class Class1
    {
        public enum test
        {
            test,
            live
        }
    }

    public class Class2
    {
        public void x()
        {
            TestAlias t = TestAlias.live;
        }
    }
}

称为类型别名,定义如下:using TestAlias= Class1.test;

应该注意的是,您必须在 您使用它的文件中定义该别名,并且它不会复制到其他文件,因此您必须在您使用的每个文件中定义它它。

【讨论】:

  • 是的,这就是我想要的。谢谢
  • 这不是继承。如果您查看编译后的 IL,则会引用原始类型。
  • @MatthewWhited 不是故意的,根据 cmets 的问题,他只是想使用类型名称而没有冗长的文本。我几乎从不使用别名,但可以做到。我写了关于枚举在主要 cmets 中不可继承的评论......他在帖子中的尝试不是继承,他试图引用另一种类型,只是没有很好地说明。
  • 请随意,但这样的事情以后会引起混乱。如果你打算使用这种技术,我会建议一个全局/基类,并使用类似的 using 语句是两个类。但是,当您稍后使用该值时,将包含原始位置的名称,除非您在使用点声明另一个别名。
  • 好的。我明白你们都在说什么。同样,我并不是说这是我想这样做的唯一方法,我只是想知道这种事情是否可能。我只是把我的问题说得很糟糕,因为我还在学习。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2021-07-12
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多