Уничтожается ли объект сборщиком мусора в приложенном коде - C#

Узнай цену своей работы

Формулировка задачи:

Доброго дня Вам. Возник вопрос: имеем код
namespace VNServer
{
    public partial class MainForm : Form
    {
        ....
        public NetProcess[] NetFunClass = new NetProcess[ChannelCount];
 
        public MainForm()
        {
            InitializeComponent();
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            int i = 0;
            ....
            for (i = 0; i < ChannelCount; i++)
            {
                NetFunClass[i] = new NetProcess();
                NetFunClass[i].Num = (byte)i;
            }
        }
        //----------------------------------
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int i;
 
            for (i = 0; i < ChannelCount; i++)
                NetFunClass[i].NetClose();
 
            this.Close();
        }
    }//class MainForm
//================================================================================
    public class NetProcess
    {
        public byte Num;
        ....
        public NetProcess() // конструктор
        {
         ....
        }
        //---------------------------------------
        ~NetProcess()
        {
            ;
        }
        ....
        //---------------------------------------
        public void NetClose()
        {
          .....
        }
    }// public class NetProcess
}//namespace VNServer
Вопрос: 1. Через некоторое время вызывается деструктор класса NetProcess подозреваю, что это сборка мусора, но если вызван деструктор класс уничтожается, или я не прав? 2. Если класс уничтожен, то почему вызов NetFunClass[i].NetClose(); работает, ведь по идее класса уже нет? Сори если вопрос глупый, просто я новичок в С#. В принципе все работает, но хотелось бы разобраться. Заранее благодарен.

Решение задачи: «Уничтожается ли объект сборщиком мусора в приложенном коде»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//-------------------------------
using SoundLib;
//-------------------------------
 
namespace SoundLibTest
{
    public partial class Form1 : Form
    {
        public static List<string> _items = new List<string>();
 
        Sound.WaveCallbackProc CallBackFun = CallBackFunction;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            int r = Sound.InitSound();
 
            listBox1.BeginUpdate();
            listBox1.Items.Add(" fdsfsdfsd ");
 
            _items.Add("Init " + r + " InCount " + Sound.InDeviceCount + " OutCount " + Sound.OutDeviceCount);
            _items.Add(" dgsdgsdg ");
            //listBox1.DataSource = null;
            listBox1.DataSource = _items;
            //listBox1.Items.Add(_items);
            listBox1.EndUpdate();
            listBox1.Refresh();
 
            r = Sound.OpenInDevice(0, CallBackFunction);
            r = Sound.OpenOutDevice(0, CallBackFunction);
        }
        #region ------ CallBack Audio -------
        public static void CallBackFunction(IntPtr hwi, Sound.WimMessageType uMsg, IntPtr dwInstance, IntPtr dwParam1, IntPtr dwParam2)
        {
            switch (uMsg)
            {
                case Sound.WimMessageType.OpenIn:
                    break;
                case Sound.WimMessageType.CloseIn:
                    break;
                case Sound.WimMessageType.DataIn:
                    Sound.PreparedInBuffer();
                    Sound.AddInBuffer();
                    
                    Sound.PlayBuffer(Sound.waveInHeader.lpData);
                    break;
                //---------------------------------
                case Sound.WimMessageType.OpenOut:
                    break;
                case Sound.WimMessageType.CloseOut:
                    break;
                case Sound.WimMessageType.DataOut:
                    break;
            }
        }
        #endregion
 
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Sound.StopInDevice();
            Sound.UnPreparedInBuffer();
            Sound.UnPreparedAllOutBuffer();
            Sound.CloseInDevice();
            Sound.CloseOutDevice();
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Sound.PreparedInBuffer();
            Sound.AddInBuffer();
            Sound.StartInDevice();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы