Уничтожается ли объект сборщиком мусора в приложенном коде - 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();
}
}
}