I am glad the topic somewhat shifted to OOP, mainly because it is a common argument for the reason we should move to .net.

I struggled with understanding OOP for many years, mainly the inheritance part. The whole inheritance thing totally did not compute in my brain, it did not make sense to me to put in concrete structure of my programs in what felt like very odd ways of building hierarchies which really are not natural to the way I solve problems.

In recent years I have come to terms that I was not the only one that felt this way about inheritance, and in fact some very wise people concur. The way that fits better for me is object composition, instead of using inheritance, using objects/classes as building blocks. It is much more flexible to change, and the more I use this technique the more I see first hand that changes and maintenance is much easier for me.

To back this up even more, about 15+ years ago I used to work with java-oop disciples. I met with them several years later to ask them what they have learned over the years, the answer was unanimous from all of them. There is no one way to solve software problems and their fanatical approach to OOP was not effective in the long run.

So in conclusion, just as in life, using multiple techniques to include OOP, procedural, functional and all hybrids in between gets the best results in software design. The argument that somehow if we move to .net and now were able to use inheritance, our software will be better is not true, so in the end moving to .net does not have any benefit in my mind.