c enum能像java一样吗,是否有可能在c#中模仿这个java enum代码

本文探讨了在Java中使用抽象类和静态实例与使用委托(通过行动或lambda表达式)来实现固定行为集合的区别。两种方法都避免了枚举的使用,同时限制了类的继承。在第一种方法中,每个逻辑行为都有一个私有的具体类实现。而在第二种方法中,行为逻辑被封装在委托里,通过静态方法或lambda表达式实现。这两种方式提供了不可扩展的预定义行为集,但后者可能更为简洁。
摘要由CSDN通过智能技术生成

这是一个选项 – 不使用枚举,但类似的东西 – 是…

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做的事情,只是这个类会稍微隐藏你.

以下是使用委托处理不同行为的替代方法:

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 accept;

private Logic(Action 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

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值