все. Я никогда не работал с деструкторами и не распоряжался, так что это ново для меня. У меня есть задача делать класс, который имеет деструктор и отчуждать методы, и что имеет UInt64
Id свойства, которое автоинкрементное и статический Dictionary<UInt64,MyClass>
, который должен ссылаться на Id всех живые экземплярам MyClass
.Как удалить управляемые и неуправляемые объекты в C#?
После поиска, как использовать их должным образом, это то, что я в конечном итоге делает:
public class MyClass : IDisposable
{
private static Object Lock = new Object();
private static Dictionary<UInt64, MyClass> LiveInstances = new Dictionary<UInt64, MyClass>();
public UInt64 Id { get; private set; }
public MyClass()
{
lock (Lock)
{
var newId = IncrementalId();
if (newId == 0)
{
throw new ArgumentException("Reached MAX VAL");
}
Id = newId;
LiveInstances.Add(Id, this);
}
}
~MyClass()
{
CleanUpNativeResources();
}
public void Dispose()
{
lock (Lock)
{
CleanUpManagedResources();
CleanUpNativeResources();
GC.SuppressFinalize(this);
}
}
protected virtual void CleanUpManagedResources()
{
LiveInstances.Remove(Id);
}
protected virtual void CleanUpNativeResources()
{
}
private static UInt64 IncrementalId()
{
for (ulong i = 0; i <= Convert.ToUInt64(LiveInstances.Count) ; i++)
{
if (i != UInt64.MaxValue && !LiveInstances.ContainsKey(i + 1))
{
return i+1;
}
}
return 0;
}
}
Теперь мой вопрос Как утилизировать объекты? ли я пытаюсь найти примеры располагающих объектов, я нахожу что-то вроде этого:
// Code to dispose the managed resources of the class
Console.WriteLine("Object disposed");
Спасибо заранее.
У вас нет неуправляемых ресурсов, ни неуправляемых ресурсов, которые реализуют 'IDisposable', так что вам не нужно реализовать' IDisposable'. Сборщик мусора позаботится обо всем для вас. –
Хорошо. Но что, если я хочу избавиться от текущего экземпляра объекта? Мне нужно создать другие объекты и заменить удаленные объекты (это означает, что они будут использовать идентификаторы, которые удалили объекты, которые были использованы), и я не хочу, чтобы объекты с тем же идентификатором вокруг моей программы. –