是否有可能在C#中模仿此Java枚举代码

是否有可能在C#中模仿此Java枚举代码,第1张

是否有可能在C#中模仿此Java枚举代码

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

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<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    }}

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5489307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存