|Sure there's a web site...this one! There's also http://msdn.microsoft.com[^], the Microsoft Developer Network, and many, many other sites.
First of all, understand that C# is merely one of many languages that target the Common Language Runtime, the runtime of the .NET Framework (and like all languages, the compiler produces very similar Intermediate Language, or IL, making assemblies available across languages and platforms). Code that runs in the CLR is often called managed code because the CLR manages all memory, so don't use pointers unless you have to! This requires an unsafe context.
In .NET, all objects are already reference Types and inherit from
System.Object, except for enums, structs, and intrinsic types like
byte), et. al., which derive from
ValueType (which also derives from
Object, but is handled different by the CLR). These are allocated on the stack. Some managed languages like C# can use unsafe contexts for things like pointer manipulation, but this is usually only done when processing image pixels. For the most part, don't use it and just let the CLR do its job: managed memory.
The best thing is to start reading the .NET Framework SDK, starting with the Overview[^].
-----BEGIN GEEK CODE BLOCK-----
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----