2012-03-28 4 views
1

System.Web.UI.PageのインスタンスでPage_LoadメソッドのSessionオブジェクトにアクセスできますが、他の場所でSessionオブジェクトにアクセスできないのはなぜですか?セッションオブジェクトへのアクセス

public partial class Statystyki : System.Web.UI.Page 
    { 
     // Session object not allowed here 


     protected void Page_Load (object sender, EventArgs e) 
     { 
       // but allowed here 
     } 
    } 

カスタムクラスでは使用できません。どのように自分のクラスからこのオブジェクトへの参照を取得するには?

答えて

3

あなたはあなたが得るエラーは、ページのライフサイクルとは何の関係もありませんその中核となるのは、この

HttpContext.Current.Session["Key"] 
+0

Webページの「セッション」としてアクセスできる理由は、ページ(サブクラス)がSession ...というプロパティにラップするためです。 – TGH

+0

ニース、必要なものです。 – zgnilec

2

セッションプロパティは、Pageオブジェクトの作成後に設定されます。page lifecycle

+0

+1私が言おうとしていたもの –

+1

他の場所の意味によっては、HttpContext.Current.Sessionも使用できます。 – Brownman98

+0

私は自分のクラスのコンストラクタにSessionを渡す必要があるとき、いつ、どこで、私はaspxファイルでNUll参照なしでそれを行う必要がありますか? Page_Init? – zgnilec

2

のようなカスタムクラスにアクセスすることができます - 単にフィールド初期化子が/他のフィールドにアクセスすることを許可されていません作成されているオブジェクトのプロパティ。 C#の仕様から

- 10.5.5.2インスタンスフィールドの初期化:インスタンスフィールドの

変数初期化子は、作成され インスタンスを参照することはできません。したがって、変数初期化子で を参照するコンパイル時エラーは、 変数初期化子が シンプル・ネームを使用してインスタンス・メンバーを参照するコンパイル時エラーです。この例のクラスA {int x = 1; int y = x + 1; // エラー、これのインスタンスメンバーへの参照}変数初期化子 のyは、作成されるインスタンスのメンバ を参照するため、yのコンパイル時エラーが発生します。

関連する問題