0

私は、使用している XNA プロジェクトで使用するダイ ローリング プログラムの構築に取り組んでいますが、ここでの私の質問は純粋に C# であり、ベスト プラクティスや注意が必要な落とし穴に関するものです。オブジェクトの定義で静的メソッドを効果的に使用して、デフォルト項目の作成の概要を説明していますか。

以下は、私が使用しているコードのスナップショットです。

public struct Die{
    private DieType die;
    private static Random rnd = new Random();
    public static Die d2 = new Die(DieType.d2);
    public static Die d4 = new Die(DieType.d4);
    public static Die d6 = new Die(DieType.d6);
    public static Die d8 = new Die(DieType.d8);
    public static Die d10 = new Die(DieType.d10);
    public static Die d12 = new Die(DieType.d12);
    public static Die d20 = new Die(DieType.d20);
    public static Die d100 = new Die(DieType.d100);

    public Die(DieType die){
        this.die = die;
    }

    public int Roll(){
        return rnd.Next((int)die);
    }
}

これを使用すると、Die 構造体への参照を作成すると、コードは問題なくコンパイルされるように見えます。

List <Roll> diceCup = new List<Roll>();
diceCup.Add (new Roll(4,Die.d6,-Die.d6.Roll()));

Roll は、Quantity of Die をロールに使用し、short を使用してそれを変更する別の構造体です。

上記のサンプルの場合、4d6-d6 の新しいロールを作成します。

これらのサイコロの新しいインスタンスを作成している場合、後で問題が発生することはありますか?

アドバイスありがとう!

アンドリュー

4

1 に答える 1

0

メソッド グループとして使用する場合は、多くのクラスに静的ファクトリ メソッドを追加します。

var people = names.Select(Person.Create);

この場合、さまざまなファクトリ メソッドのセットを静的プロパティと遅延シングルトンのセットに置き換えるだけです。

public class Die
{
    private static Die _d2;

    public static Die D2
    {
        get
        {
            if(_d2 == null)
                _d2 = new Die(DyeType.D2);

            return _d2;
        }
    }

    private static Die _d3 ...

}

最初に使用するまで作成を遅らせたいので、パブリック静的フィールドだけでなくこれらを使用します。

これは次のように簡略化できますLazy<T>: http://msdn.microsoft.com/en-us/library/dd642331.aspx

public class Die
{
    private static readonly Lazy<Die> _d2 = new Lazy<Die>(() => new Die(DyeType.D2));
    private static readonly Lazy<Die> _d3 = new Lazy<Die>(() => new Die(DyeType.D3));
    private static readonly Lazy<Die> _d4 = new Lazy<Die>(() => new Die(DyeType.D4));

    public static Die D2 { get { return _d2.Value; } }
    public static Die D3 { get { return _d3.Value; } }
    public static Die D4 { get { return _d4.Value; } }

    ...
}
于 2013-06-29T07:16:44.570 に答える