Perhaps way to grasp it is to understand what .NET is.
.NET is basically a specification for a virtual machine, code that can run on that virtual machine and class/type library[Sound familiar?].
However, unlike java, there isn't a strict requirement on the language used to write the code. In java, you write your code according to the java syntax rules - this is then compiled into the java byte code (binary).
.NET is also designed to be interoperable - in otherwords, you should be able to use classes written in any language with code written in any other language. This places a number of restrictions and requirements on what the languages can do. This specification, that languages should adhere to, is called the common language specification (CLS).
As an example of why it is important: What happens if you write a class that takes unsigned 32 bit integers as a member field, but you want access it from a language which doesn't have unsigned types?. If a language isn't CLS compatible - it will still work fine - you just might have trouble accessing classes written in that language from another language.
In .NET you can use any compiler that can produce byte code that will run on the virtual machine. The Common language runtime (CLR) is the name for the .NET virtual machine.
Microsoft have compilers for C++, C#, J#, F# + others, and there are more from other vendors (e.g. Delphi).
So, what are C#, J#, etc. ?
C# is basically a 'simplified' version of C++, designed to make it easier to code while avoid some of the common mistakes.
It shares a C++ type syntax, but some of the behaviours are changed (e.g. in C++ you can address objects directly or as references - but in C# class objects are always references). There are also changes and simplification to inheritance - e.g. C++ allows multiple inheritance, which is not part of the CLS. In C# there is no multiple inheritance, for this reason.
That said, C# isn't 100% CLS compatible - there are a couple of minor things that it allows which aren't in the CLS - but they're easy enough to avoid, and the compiler can warn you about them.
J# is a .NET language that is designed to be as similar to java as is possible. Essentially, in the same way C# is a derivative of C++; J# is a derivative of Java.
However, J# is a bit more than just a compiler for a language - it includes its own class library that replicates the java class library. This allows programmers familiar with java to start using J# without having to relearn the basic classes (the .NET core class libraries are somewhat different to the core java class libraries), and allows porting of code from java with relative ease.
The J# 'java-like' class libraries aren't included with the .NET framework in Windows. If you want to distribute a J# program, you'll need to include the J# redistributible components (or the customer will have to get them from microsoft).