gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:13:52 25 4
gpt4 key购买 nike

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

最佳答案

完整的 Java 枚举功能在 C# 中不可用。不过,您可以使用嵌套类型和私有(private)构造函数合理地关闭。例如:

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 枚举非常适合。在其他情况下,您只需将参数传递给私有(private)构造函数即可获取众所周知的受限值集。

这并没有给你一些东西:

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

其中一些可能只需付出足够的努力就可以完成,但如果没有黑客技术,切换实际上是不可行的。现在,如果 语言 做了这样的事情,它可以做一些有趣的事情,通过使骇客自动化(例如,自动声明 const 字段的负载,并更改任何将枚举类型切换为整数,仅允许“已知”情况。)

哦,部分类型意味着您不必将所有枚举值放在同一个文件中。如果每个值都参与其中(这绝对是可能的),那么每个值都可以有自己的文件。

关于c# - C# 中的 Java 枚举相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1376312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com