I'm really unclear on the difference between C#, C#.NET and the same for ASP and other '.NET' languages.

From what I understand, .NET is a library/framework of... things. I think they're essentially access to Windows data such as form elements etc, but that doesn't seem to apply for ASP.NET.

In addition, I see people calling themselves '.NET' developers. Does this mean they're fluent in C#, ASP and other languages?

Finally, I never see C# without .NET attached. Is C# tied that closely to .NET as to be unusable without it?

In summary: what exactly does .NET provide? How does it relate to C# and ASP etc? What does 'a .NET developer' mean? And finally, why do you never see C# without .NET?

[As an aside, I realise these are multiple questions, but I think they are very inter-related (or at least that is the impression that browsing Programmers / SO etc has given me)].

I understand your confusion, believe me I have the same perspective when it comes to the Java world! Anyway I'll attempt to break your questions down and tackle them one by one... as well as add some other points in that will hopefully help clarify what's going on:


C# and C#.NET are the same thing... C#
.NET is, as you say, a library of code that .NET languages can talk to.
.NET languages come in different flavours such as: C#.NET, VB.NET, Managed C++, F#.
.NET languages compile to CIL (Common Intermediate Language) which means they all start "talking" the same language and can therefore interoperate.
ASP.NET is the portion of the .NET library used for making web sites. There are other subsections of ASP.NET like WebForms (the old way of making web pages) or the rapidly maturing MVC library that are worth looking at too.
Forms (old tech) or the new WPF (Windows Presentation Foundation) are the technologies you'd typically use in .NET to create what you know as traditional desktop applications.


One final thing I'd like to finish on is the difference between library and framework. In recent years these two terms have been used as those synonymous, however that is not the case. The easiest way I can think to differentiate the two is:


A library contains many pieces of functionality that you may pick and choose from i.e. using one piece of technology doesn't mean you're locked into the rest. This means freedom, however you will have more work cut out for you.
A framework however very much sets out how you will be working. It provides a workflow that for better or worse is hard to change. This means rapid development/prototyping, but if significant changes are made in the future it may be impossible (or very time consuming) to implement them.


The project you're working on will depend on which choice you make.
