2016-06-29 4 views
2

В настоящее время я использую NDA-библиотеку (не коммерческую), которая имеет нулевую документацию и использует EMGU. Вот пример моего вопроса:Нужно ли мне указывать параметр в C#?

public void example() 
{ 
    Image<Gray,byte> exp = new Image<Gray,byte>(128,128); 
    foo(exp); 
    exp.Dispose(); 
} 

public bool foo(Image<Gray,byte> bar) 
{ 
    //magic here 
    //bar.Dispose() ?? 
    return true; 
} 

Когда я передать EMGU-изображение от одной функции к другой, делать я должен позвонить .Dispose() в вызываемой функции, тоже? Или достаточно назвать это в вызываемой?

+1

Хороший вопрос, но на это уже был дан ответ. Стандартное эмпирическое правило состоит в том, что если вы * создаете * это, вы несете ответственность за * распоряжение * его (если не существует согласованной передачи права собственности). Для получения дополнительной информации также посмотрите, как передаются параметры. Такие объекты передаются по ссылке в C#, поэтому вы не делаете копию объекта. –

+0

Обратите внимание, что вы должны использовать ключевое слово 'use', чтобы гарантировать, что вызывается функция exp.Dispose(), даже если выбрано исключение. –

+0

@CodyGray oh snap! Но я клянусь, что использовал поиск несколько раз. Но, может быть, я просто не смог найти подходящие слова. Спасибо за ваш ответ (комментарий) и ссылку! –

ответ

0

Следует только позвонить Dispose() один раз. Однако это должно быть нормально назвать это более одного раза, если метод Dispose() был написан «обычным способом».

Смежные вопросы