- 締切済み
c# publicについて
C#でお尋ねしたいことがあります。 (1) public form1 f=new form1( ); (2) public form1 f=null; (1)と(2)の違いを教えていただきたいです。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
>(1)パブリックなform1変数fのインスタンスを生成しました。 >(2)パブリックなform1変数fの参照をしないようにしました。 嘘は書かないで下さい。 値がnullだろうが何だろうが、参照しようと思えば参照できる。 当然、nullになっている変数を参照すれば「不正なメモリを参照しました」と言う例外が発生してプログラムが落ちるだろうけど。 「参照しないようにする」と言うのは、例えば if (f != null) { //fを使った処理をここに書く } のように「nullじゃない時だけ参照する」と言う判断を自分で行う事であって「fにnullを入れておけばオッケー」って訳じゃない。 世の中、こう言う「nullじゃない時だけ処理する」みたいな「お行儀の良いプログラム」ばっかりじゃないので「nullになってるかも知れないのを忘れて、いきなり変数にアクセスして、例外を起こしてアプリをふっ飛ばすライブラリ関数」がいっぱいある。 >(1)と(2)の違いを教えていただきたいです。 (1)は、newでform1のインスタンスを確保し、確保したインスタンスのコンストラクタを呼び出し、そのインスタンスをfに代入している。 (2)は、fにnullを代入している。何も確保しないし、何も呼び出さない。 「fに何が入っているか」は「そのプログラムを書いた人の責任」なので、もし(2)のようにしたのであれば、前述のif文のような「fがnullの場合は、fの内容にアクセスしない」と言うプログラムを書かないとならない。 (2)は、要は「フォームのインスタンスを入れておくfと言う変数は用意したが、フォームを開いてない時は入れておくべき物がないから『フォームがない』と言うのを表すため、フォームがない時はnullを入れておこう」と言う事をしているだけ。 繰り返すけど「ないものにアクセスする」つまり「nullになっているかどうか確かめずに、いきなりアクセスする」とかやると、例外を吐いてプログラムが落ちてしまうので注意が必要。
- Gab_km
- ベストアンサー率40% (20/50)
(1)パブリックなform1変数fのインスタンスを生成しました。 (2)パブリックなform1変数fの参照をしないようにしました。