1

ゲッターのみを持つパブリック プロパティがある場合、プライベート変数を使用して値を割り当ててからその値を返すのは正しいreturnですuserIDか? 将来的には、userID フィールドを使用する機能をさらに追加する予定であり、userID フィールドを使用するメソッドがこのクラスに追加される予定です。いずれかの方法に利点はありますか?これを行うべき他の方法はありますか?

    private string userID;
    public string ID
    {
        get
        {
            if (System.Web.HttpContext.Current.Request.Headers.AllKeys.Contains("UID"))
            {
                userID = System.Web.HttpContext.Current.Request.Headers["UID"].ToString();
            }
            else
            {
                userID = "0000";
            }
            return userID;
        }
    }
4

5 に答える 5

2

後続の呼び出しは前のメソッドによって設定された値を無視するため、getter が現在コーディングされている方法では代入は必要ありません。ただし、次のように結果をキャッシュできます。

private string userID;
public string ID {
    get {
        if (userID == null) {
            if (System.Web.HttpContext.Current.Request.Headers.AllKeys.Contains("UID")) {
                userID = System.Web.HttpContext.Current.Request.Headers["UID"].ToString();
            } else {
                userID = "0000";
            }
        }
        return userID;
    }
}

"UID"この実装では、最初の取得の結果をプライベート インスタンス変数にキャッシュすることで、の繰り返し読み取りを回避します。

于 2013-05-09T14:15:24.133 に答える
2

あなたはこれを行うことができますが、私は個人的には、この場合は関数に行きます.

理由は簡単です: を呼び出すとき、何らかの計算がその内部で発生する可能性があることをfunction期待します。

代わりに、 を呼び出すときproperty、それは彼が期待することではありません。fieldプロパティを呼び出すときは、内部ラッパーを呼び出すと思います。

繰り返しますが、あなたがしていること可能ですが、アーキテクチャの観点からはあまり良くありません。

したがって、この場合の私の提案は次のとおりfunctionです。

于 2013-05-09T14:15:31.600 に答える
0

使用するreturn

あなたはで設定userIDしていますget

そう

public string ID
    {
        get
        {
            if (System.Web.HttpContext.Current.Request.Headers.AllKeys.Contains("UID"))
            {
                 return System.Web.HttpContext.Current.Request.Headers["UID"].ToString();
            }
            else
            {
                return "0000";
            }

        }
    }
于 2013-05-09T14:15:08.503 に答える
0

この例では、データを永続化していないため、バッキング フィールドを持つことuserIDは無意味です。

于 2013-05-09T14:15:15.473 に答える
0

パブリック プロパティを使用しているため、いつでも実装を変更できます。役に立たない userID 変数はありません。将来必要になった場合は、いつでも追加できます。

于 2013-05-09T14:16:04.117 に答える