0

私はデジタルカメラのように動作する小さなアプリを構築しています.これが良い方法であるかどうかを理解しようとしています.カメラオブジェクトを構築した後、メモリカードクラスを「与えています」.メモリクラスは列挙型クラスのカードとサイズが列挙型クラスを形成し、

次に、これら 2 つをメモリ カードであるアレイに組み込む必要があります。

    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 に答える