Во втором примере кода сборщик мусора уничтожит объект через некоторое время после вызова actions.Walk()
. Сборщик мусора делает это недетерминированным образом, то есть вы не можете определить, когда он выполнит эту операцию.
Если ваш тип использует ресурсы, которые вы хотите утилизировать детерминистически, тогда тип должен реализовывать IDisposable
, а реализация метода Dispose
должна выполнять удаление этих ресурсов.
Потребляющий код может затем вызвать этот метод напрямую или использовать блок using
для удаления объекта, который, в свою очередь, избавляется от своих ресурсов.
например: -.
public class PresonActions : IDisposable
{
...
public void Dispose()
{
...
}
}
public class Person
{
public static void Walk()
{
using(var actions = new PresonActions())
{
actions.Walk();
}
}
}
Обратите внимание, что, поскольку вы не используете экземпляр более чем для одного вызова метода, нет смысла создавать его в статическом свойстве. Его можно создать в методе, который позволяет использовать блок using
.