2010年8月19日 星期四

物件的垃圾收集機制



當一個物件不再具有任何參考,物件就會被垃圾收集機制處理掉。

建立具有Elephant類別的程式,產生兩個Elephant實例,接著讓它們交換參考,不要讓任何Elephant實例被垃圾收集機制處理掉。

主程式

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Swap
{
    public partial class Form1 : Form
    {
        Elephant lucinda;
        Elephant lloyd;
        Elephant change;

        public Form1()
        {
            InitializeComponent();
          
            lucinda = new Elephant();   ←初始化
            lucinda.Name = "Lucinda";
            lucinda.EarSize = 33;

            lloyd = new Elephant();        ←初始化
            lloyd.Name = "Lloyd";
            lloyd.EarSize = 40;


        }

        private void button1_Click(object sender, EventArgs e)
        {
            lloyd.WhoAmI();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            lucinda.WhoAmI();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            change = lloyd;←兩個物件裡的參考要交換需要有第三個參考來幫忙,以避免其中一個物件因為裡面不再有參考而被當作垃圾收集處理掉。
            lloyd = lucinda;
            lucinda = change;
            MessageBox.Show("Objects swapped");
        }

    }
}

Elephant類別程式

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace Swap
{
    class Elephant
    {
        public int EarSize;
        public string Name;

        public void WhoAmI()
        {
            MessageBox.Show("My EarSize are " + EarSize + " inches tall.", Name + " say...");
        }
    }
}

Demo圖


主應用框架

按下第一個按鈕

按下第二個按鈕

按下第三個按鈕

再按下第一個按鈕

沒有留言:

張貼留言

C#小技巧

1.輸入mbox之後,再連續案兩次tab鍵,會自動產生messagebox.show("test");
2.區塊註解Ctrl + K + C, 區塊取消註解Ctrl + K + U