C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: GCの対象について


(過去ログ 17 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■6908 / inTopicNo.1)  GCの対象について
  
□投稿者/ あら (22回)-(2007/08/27(Mon) 09:33:01)

分類:[C#] 

お世話になっております。
Form1からForm2、Form3を表示させ、Form3で設定した値をForm2で使用しようとしています。

下記のようなコードで、Form3で入れた値は、Form1が終了するまで保持されるものなのでしょうか?
それとも、GCの対象となるのでしょうか?
(.NET2005 C#)

ご教授お願いします。

------------------------------
【Form1】
    public partial class Form1 : Form
    {
        public Class1 c1 = new Class1();

        public Form1()
        {
            InitializeComponent();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2(this);
            f2.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form3 f3 = new Form3(this);
            f3.Show();
        }
    }
    
【Form2】
    public partial class Form2 : Form
    {
        private Form1 manageForm;

        public Form2(Form1 f1)
        {
            InitializeComponent();
            manageForm = f1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //値を取得
            label1.Text = (manageForm.c1.classA.I).ToString();
        }
    }
    
【Form3】
    public partial class Form3 : Form
    {
        public Form1 manageForm;

        public Form3(Form1 f1)
        {
            InitializeComponent();
            manageForm = f1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //値を設定
            manageForm.c1.classA.I = 145;
        }
    }
    
【Class1】
    //値を保持するクラス
    public class Class1
    {
        public ClassA classA = new ClassA();
        public class ClassA
        {
            private int _i;
            public int I
            {
                get { return _i; }
                set { _i = value; }
            }
        }
    }        

引用返信 編集キー/
■6909 / inTopicNo.2)  Re[1]: GCの対象について
□投稿者/ 囚人 (146回)-(2007/08/27(Mon) 09:54:22)
どの値の心配をしているか良くわかりませんが、「GC の対象となりません」。

引用返信 編集キー/
■6910 / inTopicNo.3)  Re[1]: GCの対象について
□投稿者/ Hongliang (175回)-(2007/08/27(Mon) 09:55:40)
そもそも Class1 じゃなくて Form1 をやり取りする必要がどこに?

さて、GC は基本的に「誰も参照しなくなった」ものを片付けます。
Form1 が c1 として参照していますから、この Class1 のインスタンスは少なくとも Form1 のインスタンスがある限り(または c1 に null を代入しない限り)その条件を満たしません。
// 型とインスタンスの区別が付けにくい名前ですな。
引用返信 編集キー/
■6915 / inTopicNo.4)  Re[2]: GCの対象について
□投稿者/ 渋木宏明(ひどり) (316回)-(2007/08/27(Mon) 11:17:24)
渋木宏明(ひどり) さんの Web サイト
> そもそも Class1 じゃなくて Form1 をやり取りする必要がどこに?

ですね。

自ら不安を感じるような「データを保持したフォームを共有する」設計ではなく、「必要なデータそのものを共有する」設計にすれば妙な不安を感じることもないように思います。

引用返信 編集キー/
■6962 / inTopicNo.5)  Re[2]: GCの対象について
□投稿者/ あら (23回)-(2007/08/28(Tue) 09:21:09)
返信ありがとうございます。

おかげさまですっきりしました。

ありがとうございます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -