- - PR -
C#: FormをまたがったNetworkStreamのClose
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-06 14:55
せっきーさん、ありがとうございます。 解決できました! 可能でしたら、 1) Form1のインスタンス 2) 静的でない...のエラーの意味 を知りたく、お答え頂けるとうれしいです。 | ||||||||||||||||
|
投稿日時: 2009-02-06 19:22
時間があるので回答します。
本来は、言語仕様の基本的な部分なので、書籍等で学習して欲しいのですが、自分がきちんと説明できるか腕試ししてみたいと思います。 まず、雪ふくろうさんが作成したボタンやテキストボックスなどが配置され、NetworkStreamが宣言してあるForm1を「クラス」といいます。「クラス」とは、建物の設計図のようなもので、あくまで設計図でしかないので、建物はまだありません。 また、その設計図には、建物の寸法や材質だけではなく、「コンストラクタ」といわれる建築方法が書かれた部分が存在し、その建築方法を元に建物を建築する行為を「インスタンス化する」といいます。そして、建築が完了したものを「インスタンス」といいます。 したがって「Form1のインスタンス」とは、「Form1クラスをインスタンス化したオブジェクト」のことであり、「Form1クラスのインスタンス化」とは以下のように行います。
そして、この「インスタンス化されたForm1」が代入されている「formHoge」が「Form1のインスタンス」となります。
これは、上記をお読みいただくとわかるとおり、設計図しかなく、現実の世界には建物がまだ存在していないのに、その現実に存在しない建物の中のものを使おうとしたために出たエラーで、「'(namespace名).Form1.ns'を使うには建物を建てる必要があります」というエラーで、インスタンス化してから使えということです。 ただし、これには注意点があって、「静的でないフィールド、メソッド、またはプロパティ」の逆で「静的であるフィールド、メソッド、またはプロパティ」は設計図の状態で使用可能になります。と話を続けていくと本が1冊かけてしまうので、あとはご自分で勉強してみてください。 ところで、「Form1にコンストラクタなんて書いた覚えないよ?」なんていう疑問がわいてきませんか? | ||||||||||||||||
|
投稿日時: 2009-02-07 12:29
セラフさん、丁寧なご説明感謝いたします。
お時間割いて下さってありがとうございます。 甘えて少し追加で質問を... 今回使っているForm1は、VS2008の ファイル>新規作成>プロジェクト>Windowsフォームアプリケーション テンプレートを元にしています。 このテンプレートのMainには Application.Run(new Form1()); とあって、ここでForm1のインスタンスが作成されていると いう理解ですが、正しいでしょうか。 (これ以外の場所でnew Form1()を行っていないと思います。 これでアプリとして動作しているので、 インスタンス化はされていると思うのですが...) ここではセラフさんの例のformHogeのように オブジェクトに名称を与えていないのですが 先にあすかさんに頂いたお答えにある 「Form1のインスタンス.ns」のように使いたい場合は どうなるのでしょう。 また上記インスタンス化がされているのに 「静的でない...」のエラーが出るのはなぜでしょうか。 (やっぱり、インスタンス化されていない??? でもならなぜアプリとして動作している?????) Form1のコンストラクタは Form1.csに含まれていた public Form1(){} の中に必要な初期作業を追加しましたが この点でもご教示頂ける点があれば、ぜひお願いします。 | ||||||||||||||||
|
投稿日時: 2009-02-07 13:05
少しは本を読んで、体系的に勉強しましょうよ(-_-;
正しいです。
ここでインスタンス化したものを使わずに、Form1(←クラス名)から ns にアクセスしているからです。
どこで、ここで作成したインスタンスを使いたいかによります。 Form2 のインスタンスは、Main メソッドの中で宣言した変数にアクセスできません。そのため、Main 関数を変更するのではなく、Form1 と Form2 を変更することになります。
| ||||||||||||||||
|
投稿日時: 2009-02-09 16:50
Jittaさん、お答えありがとうございます。試してみます。
|