gpt4 book ai didi

c# - 是否有可能在 c# 中模仿这个 java 枚举代码

转载 作者:搜寻专家 更新时间:2023-11-01 01:55:59 25 4
gpt4 key购买 nike

是否可以复制在枚举中提供抽象方法的功能,内部枚举常量必须覆盖并向其提供功能?

public enum Logic {
PAY_DAY {
@Override
public void acceptPlayer(Player player) {
// Perform logic
}
},
COLLECT_CASH {
@Override
public void acceptPlayer(Player player) {
// Perform logic
}
}
,
ETC_ETC {
@Override
public void acceptPlayer(Player player) {
// Perform logic
}
};

public abstract void acceptPlayer(Player player);
}

如果不能::您能否提供一种方法,让我能够以类似的方式实现大量特定逻辑?

编辑::我知道 C# 中的枚举并不像它们在 Java 中那样是真正的“对象”,但我希望执行类似的逻辑。

编辑::澄清一下,我不想为每个特定的逻辑位提供具体的类。 IE,创建接口(interface) acceptPlayer 并创建许多新类是不合适的

最佳答案

这是一个选项 - 不使用枚举,而是类似的东西......

public abstract class Logic
{
public static readonly Logic PayDay = new PayDayImpl();
public static readonly Logic CollectCash = new CollectCashImpl();
public static readonly Logic EtcEtc = new EtcEtcImpl();

// Prevent other classes from subclassing
private Logic() {}

public abstract void AcceptPlayer(Player player);

private class PayDayImpl : Logic
{
public override void AcceptPlayer(Player player)
{
// Perform logic
}
}

private class CollectCashImpl : Logic
{
public override void AcceptPlayer(Player player)
{
// Perform logic
}
}

private class EtcEtcImpl : Logic
{
public override void AcceptPlayer(Player player)
{
// Perform logic
}
}
}

您不想为每一位逻辑提供一个具体的类——但这基本上就是您在 Java 中所做的,只是该类会稍微对你隐藏。

这是使用委托(delegate)来处理不同行为的替代方法:

public sealed class Logic
{
public static readonly Logic PayDay = new Logic(PayDayAccept);
public static readonly Logic CollectCash = new Logic(CollectCashAccept);
public static readonly Logic EtcEtc = new Logic(player => {
// An alternative using lambdas...
});

private readonly Action<Player> accept;

private Logic(Action<Player> accept)
{
this.accept = accept;
}

public void AcceptPlayer(Player player)
{
accept(player);
}

private static void PayDayAccept(Player player)
{
// Logic here
}

private static void CollectCashAccept(Player player)
{
// Logic here
}
}

在这两种情况下,您仍然可以获得一组固定的值 - 但您将无法打开它们。您可能有一个单独的“真实”枚举,但这会有点困惑。

关于c# - 是否有可能在 c# 中模仿这个 java 枚举代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9086552/

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