我正在构建一个像数码相机一样的小应用程序,我正在努力了解这是否是一个很好的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; }
}
这是最佳/正确的方式吗?
答案 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)
我建议使用Factory设计模式: http://www.codeguru.com/csharp/article.php/c19335/Guide-to-Implement-the-Factory-Pattern-in-C.htm
答案 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;