- PR -

クラスを追加したあとのnewをどこに書くべきか?

1
投稿者投稿内容
黒チビ
会議室デビュー日: 2003/10/26
投稿数: 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)の個所に記述すると、グローバル領域のような感じで使えるような気がするのです。
でも、どこか変ですよね。
考え方がまずいのかな?皆様、アドバイスをください。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2003-10-26 19:57
変数のスコープの問題ですね。
(1)はbutton1_Click()メソッド内でのローカル変数
(2)はMain()メソッド内でのローカル変数
(3)はclass Form1の属性(グローバル変数)です。
あと(3)でpublicにすれば外部からも参照可能。
省略時はprivateです。

ちなみに、このようにClass1の状態にかかわらず、keisan()の結果が変わらない場合は
メソッドをstaticにするのが一般的かもしれません。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-10-26 23:04
引用:

burton999さんの書き込み (2003-10-26 19:57) より:
(3)はclass Form1の属性(グローバル変数)です。


グローバル変数という表現はちょっと語弊があるのでは…
# まあ、この場合においては確かにグローバル変数のようなイメージにはなりますが。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2003-10-27 10:55
たしかにグローバル変数というのは語弊がありますね。
ただ分かりやすい表現が浮かばなかったもので。。。
ちなみに今回のケースはForm1の属性ではなく
button1_Clickのローカル変数としてNewすべきでしょう。
1

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