Понимание того, как с помощью блока утилизировать объекты - PullRequest
0 голосов
/ 02 октября 2019

У меня есть следующий код, где я хочу немедленно удалить экземпляр ApplicationDbContext:

using (var context = ApplicationDbContext.Create())
{
    MyRepository myRespository = new MyRepository(context);
    myRepository.ReadData();
}

Если сборщик мусора в C # хочет немедленно избавиться от ApplicationDbContext, ему придется немедленно избавиться отMyRepository также, потому что он имеет ссылку на ApplicationDbContext? Это на самом деле происходит?

Или мне нужно написать свой код, как показано ниже, чтобы убедиться, что ApplicationDbContext удален, немедленно?

using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
    myRepository.ReadData();
}

1 Ответ

1 голос
/ 02 октября 2019

Ваш второй блок кода правильный.

Один оператор использования применяется к одному объявлению.

Ват, который вы здесь написали:

using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
  myRepository.ReadData();
}

То же, что и:

var context = ApplicationDbContext.Create();
try
{
  var myRespository = new MyRepository(context);
  try
  {
    myRepository.ReadData();
  }
  finally
  {
    myRepository.Dispose();
  }
}
finally
{
  context.Dispose();
}

Это то, что генерирует компилятор для вас, поэтому вам не нужно беспокоиться о написании такой тяжелой и повторяющейся вещи, которая является возможным источником ошибок и ошибок.

Впервый код myRespository не расположен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...