cor*_*ore 6 c# enums language-design
为什么不能创建非整数枚举?我想知道这是一个语言设计决策,还是在编译器中实现这个问题.
换句话说,在语言中实现非整数枚举是否可行,但是没有合理的需要?或者如果它不可行但是合理,那么会遇到什么障碍?
有人告诉我,在C#中没有这个的原因或理由很简单,非常高兴.
没有技术上的原因导致它无法完成,但是,我们真的更多地谈论一组常量(如果它们相关,可能在一个公共命名空间内).
在枚举中,数值通常是次要的.
在下面的:
enum Fruit {
Apple,
Orange,
Pear,
Peach
}
Run Code Online (Sandbox Code Playgroud)
我们只描述一组命名常量.我们说的是Fruit类型的变量可以采用这四个值中的一个.每个的整数值是多少,实际上是不相关的.只要我只通过名称引用它们,表示Apple的值是0,1,32,-53还是0.002534f并不重要.
大多数语言都允许您指定应代表每个语言的值,但这确实是次要的.它有时很有用,但它不是枚举的核心目的的一部分.它们只是为您提供一组相关的命名常量,而不必为每个常量ID指定一个整数ID.
此外,枚举通常用于指定可与按位运算组合的可选标志.如果每个值都由一个整数表示(那么你只需要选择一个使用你想要的位模式的整数),这是微不足道的.浮点值在此上下文中没有用处.(逐位和/或操作对浮点值没有多大意义)
我认为枚举是这样做的,因为与你想要做的相反,枚举并不意味着有任何有意义的数字表示.
例如,枚举非常适合描述ff:
enum Color
{
Black,
White,
Red,
Yellow,
Blue,
//everything else in between
}
Run Code Online (Sandbox Code Playgroud)
(诚然,颜色可以用数字表示复杂类型,但暂时放纵我).心情怎么样?
enum Mood
{
Happy,
Giddy,
Angry,
Depressed,
Sad
}
Run Code Online (Sandbox Code Playgroud)
还是品尝?
enum Taste
{
Bitter,
Salty,
Sweet,
Spicy
}
Run Code Online (Sandbox Code Playgroud)
我认为你说对了.底线是:枚举是为了表示难以用数字表示的对象或对象特征,或者没有有意义或实际的数字表示 - 因此任意赋值给整数,这是最方便的数据类型.
这与节假日相反,节假日具有数字意义.
只有该语言的设计者才能告诉您为什么他们不允许非整数枚举,但我可以告诉您最可能的解释。
最初的 C 没有这样做,因为它对于其目的(一种系统编程语言)来说是不必要的。C++ 没有这样做,因为它基于 C,而且无论如何你都可以用类来模拟它。出于同样的原因,C# 可能不会这样做。
这只是我的猜测,因为我没有参与任何这些语言的设计。
一旦您决定走课程 (DateTime) 的道路,就没有理由不走到底。如果要使用枚举,可以将枚举创建为从零开始的连续整数,并使用这些枚举作为索引来创建 DateTime 值数组。
但我只有一个 Holiday 类,它提供了类中的整个工具包和 kaboodle:常量、基于这些常量返回 DateTime 的 get() 例程等等。
这为您提供了真正的封装,并且能够在不影响接口的情况下完全改变实现。为什么要放弃 OOP 的好处之一呢?
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |