Enum 权举最好放在类以外



Enum 权举能够灵活存储不同的值,避免代码中充斥大量无法解释的数字。虽然无论放在类体内还是类体外,都能调用,但最好能够放在类体以外,这样调用更加灵活。

假设此处有两个 Enum ,分别放置在类体内外,在构造函数中我们传入两个参数调用 Enum 的值。

class TestEnum
    {
        enum theFirstEnum
        {
            one,
            two,
            three,
        }
        public theFirstEnum thefirstEnum { get; set; }
        public theSecondEnum thesecondEnum { get; set; }
        public TestEnum(theFirstEnum,one,theSecondEnum two)
        {
            this.thefirstEnum = one;
            this.thesecondEnum = two;
        }
        public string Value
        {
            get
            {
                return "1: " + thesecondEnum.ToString() + ";2: " + thesecondEnum.ToString();
            }
        }

    }
    enum theSecondEnum
    {
        ONE,
        TWO,
        THREE,
    }

这样的构造在实际调用中是不合法的,编译器会报错。

比如窗体的调用函数如下:

private void button1_Click(object sender, EventArgs e)
        {
            TestEnum testEnum = new TestEnum((theFirstEnum)random.Next(3),(theSecondEnum)random.Next(3));
            MessageBox.Show(testEnum.Value);
        }

将构造函数关于第一个 Enum 部分去掉,又恢复了正常。

 public TestEnum(theSecondEnum two)
        {
         //   this.thefirstEnum = one;
            this.thesecondEnum = two;
        }

那么第一个 Enum 是不是完全不能调用了呢?其实不然,我们可以通过另外一种方法。

在类中添加返回 string 类型的方法:

public string returnEnum()
        {
            string reEnum = "";
            theFirstEnum theF = new theFirstEnum();
            reEnum += theF.ToString();
            return reEnum;
        }

并在窗体函数中添加:

private void button2_Click(object sender, EventArgs e)
        {
            TestEnum testEnum = new TestEnum((theSecondEnum)random.Next(3));
            MessageBox.Show(testEnum.returnEnum());
        }

结果如下:

综上所述,Enum 权举可以放在类内或类外,但是放在内类不符合一般情况下的调用规则,所以以后写程序尽量放在类外就好了。

时间: 2024-07-28 13:10:28

Enum 权举最好放在类以外的相关文章

项目中的常量是放在接口里还是放在类里呢?

接口只用于定义类型 ??当类实现接口时,接口就充当可以引用这个类的实例的类型(type).因此,类实现了借口,就表明客户端可以对这个类的实例实施某些动作.为了任何其他目的而定义接口是不恰当的. ??有一种接口被称为常量接口(constant interface),亚布妈祖上面的条件.这种接口没有包含任何方法,它只包含静态的final域,每个域都导出一个常量.使这些常量的类实现这个借口,以避免类名来修饰常量名. // Constant interface antipattern - do not

枚举类:用enum关键字来定义一个枚举类

1)枚举类的两种定义方法 1>通过构造器 public enum Grade{ A("A", "90-100"),B("B","80-89"),C("C", "70-79"),D("D", "80-89"),E("E", "90-100"); private String tip; private St

Java枚举类enum详解

枚举类enum是JDK1.5引入的,之前都是用public static final int enum_value来代替枚举类的.枚举类enum是一种特殊的类,它默认继承了类java.lang.Enum.和其它普通类一样,enum同样可以有成员变量.方法.构造器,也可以实现一个或多个接口,区别是: 如果有构造器,必须用private修饰. 枚举类不能派生子类. 枚举类所有的实例必须在第一行显示定义.系统会自动给这些实例加上public static final修饰,无须程序员显示定义. 枚举类默

enum,struct,union类型使用和长度

VC,C++ Builder和lcc三个编译器 间枚举类型enum长度的情况. 各种C编译器默认的字节对齐数不一致,要写通用的代码,经常就是使用 #pragma pack(1) ... #pragma pack() 来使编译器以单字节对齐. 今天在bcb5中调用vc6的dll时出现错误,但在VC中调用dll却很正常,说明很有可能是编译器之间的差异造成.仔细debug后发现bcb和vc的枚举类型长度不一样,即便使用了#pragma pack(1)编译开关. 如以下程序: /*-----------

模块的封装之C语言类的封装

[微知识]模块的封装(一):C语言类的封装 是的,你没有看错,我们要讨论的是C语言而不是C++语言中类的封装.在展开知识点之前,我首先要 重申两点: 1.面向对象是一种思想,基本与所用的语言是无关的.当你心怀面向对象时,即使使用QBasic也能写 出符合面向对象思想的代码,更不要说C语言了.举一个反例,很多人初学C++的时候,并没有掌 握面向对象的思想,活生生的把类当结构体来使用的也不在少数吧. 2.面向对象的最基本的出发点是“将数据以及处理数据的方法封装在一起”,至于继承.派生.多态之类 的则

编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议36~40)

建议36:使用构造代码块精简程序 什么叫做代码块(Code Block)?用大括号把多行代码封装在一起,形成一个独立的数据体,实现特定算法的代码集合即为代码块,一般来说代码快不能单独运行的,必须要有运行主体.在Java中一共有四种类型的代码块: 普通代码块:就是在方法后面使用"{}"括起来的代码片段,它不能单独运行,必须通过方法名调用执行: 静态代码块:在类中使用static修饰,并用"{}"括起来的代码片段,用于静态变量初始化或对象创建前的环境初始化. 同步代码块

枚举类专题(有源代码)

简介:JDK1.5之前需要自定义枚举类,JDK1.5新增的enum关键字用于定义枚举类,若枚举只有一个成员,则可以作为一种单例模式的实现方式 枚举类的属性:枚举类对象的属性不应允许被改动,所以应该使用private final修饰 ·枚举类的使用private final修饰的属性应该在构造器中为其赋值 ·若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数 Enum枚举类: ·必须在枚举类的第一行声明枚举类对象. ·枚举类和普通类的区别: 1.使用enum定义的枚举类默认继

类为什么不能老老实实的?

在<再谈面向对象>里边写了关于面向对象的一些基本语法,比如类里有成员变量和方法,还有构造方法,而且类还能通过访问修饰符修饰成员变量和方法,已达到封装的目的,类还能通过extends关键字实现继承,还能通过向上转型实例化对象实现多态,这一切看起来很美好,没有是没问题了,世界都可以用Java描述了,但是Java的基本规则不仅如此,还有很多其他特性,比如Java还提供了8个基本类型对应的包装类,final关键字,abstract修饰的抽象类和interface定义的接口等,enum关键字定义的枚举类

枚举类的介绍

枚举类,即对象为可穷举的类 JDK 1.5 新增的 enum 关键字用于定义枚举类,在这之前,需要自定义枚举类 若枚举只有一个成员(对象),则可以作为一种单例模式的实现方式--单例(单子)设计模式(Singleton) 自定义枚举类: public class TestSeason { public static void main(String[] args) { Season spring = Season.SPRING; Season summer = Season.SUMMER; Sea