Comments 5
Все круто, только есть такой хороший принцип: никогда не наследуйся от враппера на unmanaged ресурс. Т.е. классы, которые напрямую работают с unmanaged русерсами (например process token), в большинстве случаев должны быть sealed. А вот потом делаем класс, который наследуется от IDisposable и содержит враппер на unmanaged ресурс как член класса.
Хороший комментарий. А почему наследоваться от враппера на unmanaged ресурс плохо, и к каким сложностям это приводит, можно понять уже из того, что написано в этой и предыдущей записи.
И еще кое-что. Есть такой замечательный класс как System.Runtime.InteropServices.SafeHandle, который стоит использовать как базовый класс для врапперов на ресурсы если они представлены как IntPtr.
имхо, еще лучше в коде Dispose() класса-наследника заворачивать полезный код в блок try-finally.
Dispose(bool isDisposing) {
try {
// Disposing derived class
} finally {
base.Dispose(isDisposing);
}
}
Dispose(bool isDisposing) {
try {
// Disposing derived class
} finally {
base.Dispose(isDisposing);
}
}
Sign up to leave a comment.
О бедном Dispose замолвите слово (часть 2)