Уничтожается ли объект сборщиком мусора в приложенном коде - C#
Формулировка задачи:
Доброго дня Вам.
Возник вопрос: имеем код
Вопрос:
1. Через некоторое время вызывается деструктор класса NetProcess подозреваю, что это сборка мусора, но если вызван деструктор класс уничтожается, или я не прав?
2. Если класс уничтожен, то почему вызов NetFunClass[i].NetClose(); работает, ведь по идее класса уже нет?
Сори если вопрос глупый, просто я новичок в С#.
В принципе все работает, но хотелось бы разобраться.
Заранее благодарен.
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
Решение задачи: «Уничтожается ли объект сборщиком мусора в приложенном коде»
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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д