Я думаю, что следующее будет работать для этого случая (и несколько подобных в других местах на SO).Perf не будет слишком хорошим, но если это случается редко, это не будет проблемой.
Создайте трассировку стека и проанализируйте ее в поисках производного класса.В общем случае это не будет слишком надежно или даже может не сработать, но , в определенных случаях , как в OP, я считаю, что это будет работать нормально.В Powershell:
$strace = (new-object diagnostics.stacktrace).tostring()
#
$frames = $strace -split " at "
$typesFromFrames = $frames | select -skip 1| # skip blank line at the beginning
% { ($_ -split "\(",2)[0]} | # Get rid of parameters string
% {$_.substring(0,$_.lastindexof("."))} | # Get rid of method name
$ {$_ -as [type]}
#
# In powershell a lot of the frames on the stack have private classes
# So $typesFromFrames.count is quite a bit smaller than $frames.count
# For the OP, I don't think this will be a problem because:
# 1. PS isn't being used
# 2. The derived class in the OP isn't private
# (if it is then tweaks will be needed)
#
$derivedOnStack = $typesFromFrames | ? { $_.issubclassof( [BaseClass])}
Надеемся, что в $ outputOnStack будет только один элемент, но это будет зависеть от особенностей приложения.Некоторые эксперименты будут необходимы.