|Thanks for your comments.
The problem that I found coming from a code behind form (and I was there myself at one time) is that you tend to address of the problem domain through the lens of the user interface. And that becomes a problem when on day one you understand you are developing Windows desktop app and then a month later you are duplicating some or all of the functionality in a web app, or a web service.
I agree with you that Inheritance, polymorphism & interfaces may be difficult areas. Also C# adds some other useful, but new things to the mix like abstract classes, structures, collections, etc.