当前位置: 首页 > 面试题库 >

C#中的Java枚举相当于什么?

黄锋
2023-03-14
问题内容

C#中的Java枚举相当于什么?


问题答案:

完整的Java枚举功能在C#中不可用。你可以来 合理地 接近使用嵌套类型和私有构造虽然。例如:

using System;
using System.Collections.Generic;
using System.Xml.Linq;

public abstract class Operator
{
    public static readonly Operator Plus = new PlusOperator();
    public static readonly Operator Minus = 
         new GenericOperator((x, y) => x - y);
    public static readonly Operator Times = 
         new GenericOperator((x, y) => x * y);
    public static readonly Operator Divide = 
         new GenericOperator((x, y) => x / y);

    // Prevent other top-level types from instantiating
    private Operator()
    {
    }

    public abstract int Execute(int left, int right);

    private class PlusOperator : Operator
    {
        public override int Execute(int left, int right)
        {
            return left + right;
        }
    }

    private class GenericOperator : Operator
    {
        private readonly Func<int, int, int> op;

        internal GenericOperator(Func<int, int, int> op)
        {
            this.op = op;
        }

        public override int Execute(int left, int right)
        {
            return op(left, right);
        }
    }
}

当然你不 具备
使用嵌套类型,但他们给了方便的“自定义的行为”其中一部分的Java枚举是好的。在其他情况下,您可以仅将参数传递给私有构造函数以获取众所周知的受限值集。

一些不能给您的事情:

  • 顺序支持
  • 开关支持
  • EnumSet
  • 序列化/反序列化(作为单例)

尽管没有黑客,切换实际上是不可行的,但其中的一些工作可能需要付出足够的努力。现在,如果该 语言
做了类似的事情,它可以通过使黑客自动操作(例如自动声明const字段负载,并将枚举类型的任何切换更改为整数的切换,仅允许“ “案例。)

哦,部分类型意味着您不必在同一个文件中包含 所有 枚举值。如果每个值都涉及到(这绝对是可能的),则每个值都有自己的文件。



 类似资料:
  • 问题内容: 在JDK1.5之前的Java中,“ Typesafe Enum”模式是实现只能接受有限数量的值的类型的常用方法: (例如,参见Bloch的Effective Java中的第21项)。 现在在JDK1.5 +中,显然可以使用“官方”方式enum: 显然,该语法更好,更简洁(不需要为值明确定义字段,适当toString()提供),但是到目前为止enum看起来非常类似于模式。 我知道的其他差

  • 问题内容: 我正在寻找Java ByteBuffer的“ C ++”。 我可能会丢失明显的内容,或者仅需要一个孤立的用法示例进行澄清。我浏览了iostream家族,它似乎可以提供基础。具体来说,我希望能够: 从字节数组/点构建缓冲区,并从缓冲区获取原语,例如getByte,getInt 使用原语(例如putByte,putInt)构建缓冲区,然后获取字节数组/指针。 问题答案: 您已经拥有,或者可

  • 问题内容: Java是否具有表示一段时间的数据类型,例如34秒,5分钟等。 我已经看到了一些TimeSpan的实现,这些实现涵盖了从12月10日到12月11日这样的时间段。 我需要的是类似C#中的TimeSpan。 问题答案: 目前还不是JDK的一部分,但是将被合并到JDK 7中-尝试Joda Time

  • 我听到一些人建议在C++中使用枚举类,因为它们的类型安全。 但这到底意味着什么呢?

  • 问题内容: 从Java世界进入C#,是否有等效的HashMap?如果没有,您会推荐什么? 问题答案: 可能是最接近的。实现接口(类似于Java的接口)。 您应该注意一些明显的区别: 添加/获取项目 Java的HashMap具有用于设置/获取项目的和方法 C#的词典使用索引来设置/获取项目 键 Java 允许空键 如果您尝试添加空键,.NET会引发 添加重复密钥 Java 将用新值替换现有值。 如果

  • 问题内容: 我正在尝试创建一个函数,该函数将计算多维numpy数组中元素之间的晶格距离(水平和垂直步数)。为此,我需要在遍历数组时从每个元素的索引中检索实际数字。我想将这些值存储为可以通过距离公式运行的数字。 对于示例数组A 我想创建一个循环遍历每个元素的循环,对于第一个元素1,它将检索a = 0,b = 0,因为1处于A [0,0],然后对于元素来说a = 0,b = 1 2,因为它位于A [0