Brackets = access to a type
double colons = access to a static member of a type : [MyType] return a Type instance
ex:
c:> [System.Int32]
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
using the dot notation would only give you access to instance members of the Type instance (reflection related methods for most)...
c:\> [System.Int32].Parse("3")
Method call failed because [System.Runtype] does not have any "Parse" member
c:\> [System.Int32].AssemblyQualifiedName
System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
so :: is the way to access static members of a Class
c:\> [System.Int32]::Parse("3")
3