栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否有可能在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    }}

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号