なぜコードはaspxページの部分クラスの背後にあるのですか?aspxコードビハインドファイルが部分クラスとして宣言されているのはなぜですか?
答えて
私はあなたがこのMSDN Page(ASP.NETページクラスの概要)を参照することになります。
は、このチャートを参照してください。コンパイル時には、全体として生成されます。ページがコンパイルされると、ASP.NET は の.aspxファイルに基づいて、部分クラスを生成します。このクラスは、コードビハインドクラスファイルの部分的な クラスです。 生成された部分クラスファイル には、ページの コントロールの宣言が含まれています。この部分クラスを使用すると、 のコードビハインドファイルを なしで完全なクラスの一部として の一部として使用して、コントロール を明示的に宣言する必要があります。あなたのロジックが含まれている一つのクラスとデザイナーのものが含まれている1つのクラスを持っている
alt text http://img30.imageshack.us/img30/7692/msdnchart.gif
この方法:
これは、「チャートにしてはならないものをチャートにする」チャートの1つです。 – womp
「コードビハインドページの継承モデルは、単一ファイルページの継承モデルよりも少し複雑です」このMSDN記事のセクションは、このグラフをよく理解するのに非常に役立ちました。 –
クラス(デザイナーのもの)の他の部分があるのでそれは、ASP.NETは残して、異なる物理ファイルにそれらの宣言を作成する代わりに、この
public MyBasePage : System.Web.UI.Page
{
...
protected System.Web.UI.Label lblName;
protected void Page_Load(object sender, EventArgs e)
{
}
...
}
の、例えば開発者
から隠されていますこの
public partial class MyBasePage : System.Web.UI.Page
{
...
protected void Page_Load(object sender, EventArgs e)
{
}
...
}
さらに詳しい情報:
あなたは精巧にできますか?それはwinformsデザイナーのファイルと同じですか? – andrewWinn
@andrewWinn - これはwinformsデザイナーファイルと同じです。ASP.NET 1.1では、コードビハインドの先頭にすべてのコントロール宣言があり、下部に折り畳まれた領域が "すべてのイベントが配線されている「デザイナー生成、変更しない」。 –
@jaun、あなたが提供したリンクは機能していません。 – ShaileshDev
パーシャル宣言では、他のファイルにコードを書くことができます。同じ名前空間に入れてクラスに名前を付けるだけで、同じファイルにあるかのように扱われます。生成されたファイルに機能を追加するのに最適です。私はLinqToSqlオブジェクトに関数/プロパティを追加するのに最も頻繁に使用します。
さらに、醜いコードをすべてあなたから偶然それを編集する。あなたは今それを編集するためにはるかに意図的でなければなりません.... – klabranche
部分的なファイルの他の理由は、クラス定義のいくつかがツールによって生成され(ある時点で再生成される可能性がある)、クラスの残りの部分が実装される場合を処理するためです。
このような場合、部分的なクラスを使用しないと、コードが上書きされたり、生成プロセスがジョブを実行するのが困難になります(まったく問題がない場合)。
部分クラスを使用すると、生成されたコードをコードに触れることなく簡単に再生成することができます。
LINQ-to-SQL用のDataContextクラスを使用した場合のもう1つの良い例は、本当に巧妙なものが部分クラスファイルの1つのセットに生成され、再世代があなたの仕事を破壊することはないという知識で安全です。
Aspx.csは、このクラスでアクセスされるコントロール(TextBox、GridViewなど)が.Aspxファイルで宣言されているため、PARTIALクラスを使用します。物理的に別のファイル)、コントロール宣言(.aspxファイル)と、.aspxファイルで宣言されたコントロールに基づく別のビジネスロジックが含まれます。彼らは全体として単一のクラスとみなされてコンパイルされます。
- 1. HttpServletクラスが抽象クラスとして宣言されているのはなぜですか?
- 2. なぜGADBannerViewが宣言されていないのですか?
- 3. なぜ 'EINTR'が宣言されていないのですか?
- 4. C++エラーはクラスが宣言されていないと言っています
- 5. マップとしてクラス名を宣言できないのはなぜですか?
- 6. argv []がconstとして宣言されているのはなぜですか? ARGV [] CONSTとして宣言された理由のObjective-Cでは、
- 7. Javaでクラスが静的であると宣言されているのはなぜですか?
- 8. JavaのObjectクラスでwait()とnotify()が宣言されているのはなぜですか?
- 9. クラスの一部として宣言されている場合、ValueTypeはボックス化されますか?
- 10. SBTプロジェクトがなぜレイジー・ヴァルとして宣言されていますか?
- 11. 同じクラスでメソッドが定義されていると、宣言されていない識別子 'downloadDataFromURL'が使用されるのはなぜですか?
- 12. 私のクラスが内部で宣言されたインタフェースを実装できないのはなぜですか?
- 13. なぜclangは_Imaginary_Iが宣言されていないのですか?
- 14. `std`モジュールが宣言されていないのはなぜですか?
- 15. クラスがPHPで宣言されていない場合、なぜ「新しい」スローエラーが発生しますか?
- 16. Doctype宣言が2行で分割されるのはなぜですか?
- 17. .NETで戻り値の型が構造体として宣言されているのはなぜですか?
- 18. JetBrains IDEがクラスとコンストラクタが使用されていないと言っているのはなぜですか?
- 19. なぜこの変数が宣言されていないのですか?
- 20. なぜこのエラー 'init_task'が宣言されていないのですか?
- 21. なぜWebMethodがStaticとして宣言されたのですか?
- 22. JDKクラスで、Serializableが完全修飾名で宣言されているのはなぜですか?
- 23. Javaで別のファイルで宣言されているのはなぜですか?
- 24. エクスターナル・テンプレート:宣言が宣言されていないもの
- 25. CompletableFuture.allOfがCompletableFutureとして宣言されているのはなぜですか?<Void>?
- 26. バーチャルとして宣言されていない外部クラスのメソッドをモックする方法
- 27. C++クラスとメソッドを宣言し、メンバーは宣言していないヘッダーファイル?
- 28. はなぜクラスの仕事のフォワード宣言はクラスが別のクラスには含まれていない場合
- 29. 分解されたクラスのTypescript宣言
- 30. プロトタイプで宣言されている関数が呼び出されないのはなぜですか?
質問のタイトルを編集する必要があります。 _stupid_質問ではありません。 –
"サウスパークのギャリソン氏。"愚かな質問はなく、愚かな人だけです。 OK、それはここには当てはまらないので、私はその引用を気に入っています。 :D – Powerlord
唯一の愚かな質問はあなたが尋ねないものです。 – belugabob