The answer to your question is not a single cup of tea. basically At a minimum, you must:
(a) Know a lot about C# (or your chosen language), particularly about object oriented programming
keywords and concepts (static, base, override, overload, inheritance stuff, etc.), LINQ and now async features
(b) Have a solid grasp on the .NET Framework Runtime, the compiler, garbage collection, reference versus value, etc.
(c) Be familiar with the .NET Framework Class Library … know the major namespaces and what they're there for, etc.
(e) Know basic architectural ideas like layers, the development lifecycle, etc.
(f) Know basic patterns like dependency inversion, SOLID, etc. (These lead you to a deeper
knowledge of object oriented programming, btw.) You simply need to be exposed to these … understand when it makes sense to invert / inject your dependencies, how to apply the 'S' in SOLID when designing your classes and methods, etc.
Editor, DotNetSpider MVM
Microsoft MVP 2014 [ASP.NET/IIS]