Относительно вашего class Student
Нужно ли мне Dispose()
?
Предполагается, что класс Picture IDSposable: Да .Потому что объект Student «владеет» studentPic
, и это делает его ответственным за его очистку.Минимальная реализация:
class Student : IDisposable
{
private PictureClass studentPic;
public void Dispose()
{
if (studentPic != null)
studentPic.Dispose();
}
...
}
И теперь вы используете объект Student, например:
void Test
{
using (Student a = new Student())
{
a.displayStudentPic();
} // auto Dispose by using()
}
Если вы не можете / не используете блок using(){}
, просто вызовите a.Dispose();
когда вы закончите с этим.
Но, пожалуйста, обратите внимание, что (намного) лучший дизайн здесь будет заключаться в том, чтобы не держать объект изображения внутри объекта Student.Это определяет целую цепочку обязанностей.
Нужен ли мне финализатор?
Нет .Потому что, когда объект Student собирается, его объект studentPic гарантированно будет собран в одном прогоне.Финализатор (деструктор) будет бессмысленным, но все же дорогим.