Some thoughts:
- If the methods need to be overriden, why are they
virtual
instead ofabstract
? - Code that should not be changed doesn't belong in the derived class. It belongs in the base class.
catch { throw; }
is useless. Remove it.- Returning a boolean value from a
void
method causes a compiler error. - Setting local variables to
null
is useless. - Not all reference types implement
IDisposable
.
Generally: Most of your requirements seem to have no business value.
- Why prohibit implementation of an interface?
- Why prohibit declaration of other methods?
- Why prohibit
catch
clauses? - etc.
You should really think about what your actual business requirements are and model your classes after them. If the classes need to fulfill a certain contract, model that contract. Leave the implementation to the implementor.
About the actual questions raised:
You can't use reflection here. You can either analyze the original source code or the IL code of the compiled assembly.
Both options are pretty tricky and most likely impossible to achieve within your limited time. I am positive that fixing the architecture would take less time than implementing one of those options.