- - PR -
クラスを追加したあとのnewをどこに書くべきか?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-10-26 19:21
VC#でまず、プロジェクトを作成し、Form1個の他にクラスを1個追加しました。
クラスのメソッドは引数2個のそれぞれを加算した値をReturnするという簡単なものです。 Form側では、ホ?タンを押して加算結果をテキストBoxへ表示するという単純なものです。 そこで、 (1)ボタンのクリックの個所に private void button1_Click(object sender, System.EventArgs e) int kekka = 0; Class1 cl1 = new Class1(); <??ここです。 kekka = cl1.keisan(2,; textBox1.Text = kekka.ToString(); これはOKでした。 (2)mainのところに置いてみました。 static void Main() { Class1 cl1 = new Class1(); <???ここです。 Application.Run(new Form1()); } ボタンの ところは //Class1 cl1 = new Class1(); とコメントでとめました。 コンパイルで ボタンのところの記述 Class1 cl1 = new Class1(); に名前空間・・・というエラーが出ます。 (3)Form1のコンストラクターの上の行においてみました。 namespace WindowsApplication5 { /// <summary> /// Form1 の概要の説明です。 /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox textBox1; /// <summary> /// 必要なデザイナ変数です。 /// </summary> private System.ComponentModel.Container components = null; Class1 cl1 = new Class1(); <???ここです。 public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); ここではOKでした。コンパイルも通り、動作もOKでした。 (3)について、どうもよく説明できないのです。こういう、記述してよいものかどうか。 (3)の個所に記述すると、グローバル領域のような感じで使えるような気がするのです。 でも、どこか変ですよね。 考え方がまずいのかな?皆様、アドバイスをください。 | ||||
|
投稿日時: 2003-10-26 19:57
変数のスコープの問題ですね。
(1)はbutton1_Click()メソッド内でのローカル変数 (2)はMain()メソッド内でのローカル変数 (3)はclass Form1の属性(グローバル変数)です。 あと(3)でpublicにすれば外部からも参照可能。 省略時はprivateです。 ちなみに、このようにClass1の状態にかかわらず、keisan()の結果が変わらない場合は メソッドをstaticにするのが一般的かもしれません。 | ||||
|
投稿日時: 2003-10-26 23:04
グローバル変数という表現はちょっと語弊があるのでは… # まあ、この場合においては確かにグローバル変数のようなイメージにはなりますが。 | ||||
|
投稿日時: 2003-10-27 10:55
たしかにグローバル変数というのは語弊がありますね。
ただ分かりやすい表現が浮かばなかったもので。。。 ちなみに今回のケースはForm1の属性ではなく button1_Clickのローカル変数としてNewすべきでしょう。 |
1