0

我正在构建一个像数码相机一样的小应用程序,我试图了解这是否是一个好的 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

4 回答 4

3

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

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

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


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

于 2013-01-24T12:04:19.560 回答
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; } }
于 2013-01-24T12:02:38.887 回答
0

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

于 2013-01-24T12:05:14.177 回答
-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;
于 2013-01-24T12:21:15.153 回答