Хм... помнится рекомендвли делать как-то так, политика партии сменилась?
Пара замечаний к коду: во первых, ты показываешь вариант работы
без использования транзакции; во вторых - в коде ты не выполняешь фиксацию или откат выполненных изменений. В виду этого не понятно: либо так задумано (т.е. ты
по умолчанию выполняешь откат изменений), либо просто
забыл это сделать. Я считаю, что всегда нужно чётко обозначать свои намерения, дабы таких сомнений не возникало. Если изменений не было, то рекомендуется фиксировать, вместо отката, т.к. фиксация работает быстрее.
По поводу "политики партии": имхо - оба способа имеют право на жизнь. Какой из них быстрее - это нужно замерять (я не сравнивал). Мне импонирует использование IsDerivedFrom, т.к. этот вариант сразу возвращает логическое значение, в виду чего отпадает необходимость последующего сравнения на равенство null.
Если говорить о сравнении, то я предпочитаю писать так:
if (null != ptk) {
// get_object действительно DBPoint
// и мы можем с ним работать как с DBPoint
}
Применительно к C# это роли не играет, но взять такой вариант в привычку полезно, если помимо C# ты пишешь и на др. языках программирования, например на C или C++, где
любое значение может интерпретироваться как логическое. Например, если ты в C++ сделаешь опечатку:
то компилятор это "скушает" и не будет ругаться. А работать программа будет неверно. Если же опечатка выглядит так:
то такой номер не пройдёт.
UPD хотя... Применительно к C# это тоже имеет место быть:
// здесь 'a' - это переменная типа Boolean.
if (a = false) { // если программист предпочитает сравнивать с false, вместо инвертирования значения: !a.
// get_object действительно DBPoint
// и мы можем с ним работать как с DBPoint
}