- PR -

WEBサーバコントロールの初期化について

1
投稿者投稿内容
うみの
常連さん
会議室デビュー日: 2006/08/23
投稿数: 20
お住まい・勤務地: 千葉・埼玉
投稿日時: 2006-10-11 10:55
特に困っているという訳ではないのですが、疑問が解決しないので質問させてください。

コードビハインドにて開発をする場合ですが、aspx側に「id=TextBox1」というテキストボックスがあったとして、(C#の場合は).csファイルに

protected System.Web.UI.WebControls.TextBox TextBox1;

を宣言しますよね。通常はこれで「TextBox1」をいじれる訳ですが、aspc側のTextBox1を消して実行した場合、「オブジェクト参照がオブジェクト インスタンスに設定されていません」のエラーが出ます。確かに「TextBox1」を初期化していないので当たり前ですが・・・

ここで疑問に思ったのが、.csの「TextBox1」はいつどこで初期化されるのでしょうか? aspx側に対応するidのコントロールがあれば自動的に初期化されるのでしょうが、ここの仕組みがちょっと気になってしまいました。ご存知の方がいらっしゃいましたらご教授をお願いいたします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-10-11 13:32
aspxファイルとcsファイルの関係がたぶんはっきりしていないのでしょうね。
csファイルにTextBox1の宣言をしているということはASP.NET 1.1でしょうから、それを前提に話をします。
まずcsファイルはそのままコンパイルされますが、aspxファイルは自動的にコードに変換され、その後コンパイルされます。このとき、aspxファイルはcsファイルを継承するクラスとして定義されます。
で、リクエストがブラウザからあがってきたとき、実際にはcsファイルを継承したaspxファイルのインスタンスが生成されます。各コントロールは通常このクラスの中でインスタンスオブジェクトとして定義されているため、aspxのインスタンスが生成される時点でコントロールのインスタンスも生成/初期化されることになりますね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-10-11 22:18
初期化というのは、ちょっと違う。
protected ... textBox1 = null;
としてみてください。これで textBox1 は null に初期化されましたが、ヌル参照の例外は、依然発生します。

_________________
1

スキルアップ/キャリアアップ(JOB@IT)