首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过枚举类初始化对象

通过枚举类初始化对象
EN

Stack Overflow用户
提问于 2013-01-24 19:43:39
回答 4查看 109关注 0票数 0

我正在构建一个像数码相机一样的小应用程序,我想知道这是不是一个好的oop方法,在我构建了一个相机对象后,我给了它一个内存卡类,内存类从枚举类中获取卡的类型,大小从枚举类中获得。

现在,我需要将这两个合并到一个数组中,即存储卡。

代码语言:javascript
运行
复制
    public enum MemoryCardType
{
    Sd,
    xd,
    MicroSd,

}
    public enum MemoryCardSize
{
    TwoGB = 2024,
    FourGB = 4048,
    EightGB = 8096

}
    public class MemoryCard
{

    public MemoryCard(MemoryCardType memoryCardType, MemoryCardSize memoryCardSize)
    {
        this.MemoryCardType = memoryCardType;
        this.MemoryCardSize = memoryCardSize;
    }

    public MemoryCardType MemoryCardType { get; set; }
    public MemoryCardSize MemoryCardSize { get; set; }
}

这是最好的方法吗?

EN

回答 4

Stack Overflow用户

发布于 2013-01-24 20:04:20

您的方法没有任何问题,但这实际上取决于您计划如何使用这个类。

然而,您应该注意的是,代码会检查类的对象(在本例中为存储卡的类型/大小),以确定如何使用该对象。尽可能地,应该由对象决定如何处理其状态,而不是外部/客户端代码。

这可能看起来很模糊,但如果没有更多的细节,就很难给出任何具体的建议。

但是,选择以兆字节为单位的大小作为枚举的值有什么原因吗?对于使用您的代码的人来说,这一点都不明显。

票数 3
EN

Stack Overflow用户

发布于 2013-01-24 20:02:39

就我个人而言,如果值真的很重要,我不会使用枚举。您无法真正确保这些值是您所期望的。尤其是,如果有其他开发人员在同一项目上工作。

这就是我要做的:

代码语言:javascript
运行
复制
abstract class MemoryCardSize
{
    public int MegaBytes { get; protected set; }
}

class TwoGB : MemoryCardSize { public TwoGB() { MegaBytes = 2024; } }
class FourGB : MemoryCardSize { public FourGB() { MegaBytes = 4048; } }
class EightGB : MemoryCardSize { public EightGB() { MegaBytes = 8096; } }
票数 1
EN

Stack Overflow用户

发布于 2013-01-24 20:05:14

我推荐使用工厂设计模式:http://www.codeguru.com/csharp/article.php/c19335/Guide-to-Implement-the-Factory-Pattern-in-C.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14500567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档