通过枚举类初始化对象

时间:2013-01-24 11:43:39

标签: c# oop

我正在构建一个像数码相机一样的小应用程序,我正在努力了解这是否是一个很好的oop方式,在我构建了一个相机对象后,我正在"给予"它是一个存储卡类,内存类从枚举类获取卡的类型,大小形成枚举类,

现在我需要将这两者合并到一个存储卡阵列中。

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

这是最佳/正确的方式吗?

4 个答案:

答案 0 :(得分:3)

您的方法没有任何问题,但这实际上取决于您打算如何使用该课程。

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

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


但是,您是否有理由选择使用以兆字节为单位的大小作为枚举值?对于使用您的代码的人来说,情况并非一点都不明显。

答案 1 :(得分:1)

就个人而言,如果值真的意味着非常重要的话,我就不会使用枚举。您无法确保这些值符合您的预期。特别是,如果有其他开发人员在同一个项目上工作。

这就是我要做的事情:

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

答案 2 :(得分:0)

答案 3 :(得分:-1)

工厂示例:

public static class MemoryCardFactory
    {
        public static MemoryCard Sd2GB { get { return MemoryCard(MemoryCardType.xd, MemoryCardSize.TwoGB); } }
        public static MemoryCard Sd4GB { get { return MemoryCard(MemoryCardType.xd, MemoryCardSize.FourGB); } }
        public static MemoryCard Sd8B { get { return MemoryCard(MemoryCardType.xd, MemoryCardSize.EightGB); } }

        public static MemoryCard Xd2GB { get { return MemoryCard(MemoryCardType.xd, MemoryCardSize.TwoGB); } }
        public static MemoryCard Xd4GB { get { return MemoryCard(MemoryCardType.xd, MemoryCardSize.FourGB); } }
        public static MemoryCard Xd8GB { get { return MemoryCard(MemoryCardType.xd, MemoryCardSize.EightGB); } }

        public static MemoryCard MicroSd2GB { get { return MemoryCard(MemoryCardType.MicroSd, MemoryCardSize.TwoGB); } }
        public static MemoryCard MicroSd4GB { get { return MemoryCard(MemoryCardType.MicroSd, MemoryCardSize.FourGB); } }
        public static MemoryCard MicroSd8GB { get { return MemoryCard(MemoryCardType.MicroSd, MemoryCardSize.EightGB); } }
    }

你可以像这样使用它:

MemoryCard mc= MemoryCardFactory.MicroSd2GB;