After a long slog of five months, I'm actually creating production-level C# code. I've used the Adapter, Command, and N-tier patterns so far, and may very well end up using more. What I find absolutely striking is how I can re-factor (re-write to get the same functionality in a different way) big chunks of code, look at it, say to myself, "that should work," run the test, and it works! I hardly ever refactored in Cold Fusion because it never worked when I thought it should. Tons of extra debugging makes Scott an unhappy programmer!
The more familiar I get with it, the more I'm beginning to realize that I've been trying to code like this for ten or eleven years, ever since I completed my first "enterprise" CF app*. Unfortunately, while Cold Fusion is extremely elegant when it comes to hooking databases up to web pages, if you try to do anything else it gets very clunky very fast (IMO).
Which is not to say C# and the .Net "way" are perfect. Far from it. I've been tinkering enough now to find some definite weaknesses. But it's so much better than what I was doing before.
Hell I may end up making a living doing this. You never know.