Sure. This is a common quote out of the .NET documentation.
Many classes have public static members, which means that an instance of the
class does nothave to exist in order to use the member.
For example, String.Format is a method that is called by stating, literally,
String.format. You don't first create a string object, then call the format
member on the object.
However, instance members are members that cannot be called unless an
instance of the class exists. For example, String.Insert() will insert one
string at a location within another. You call it by creating an object of
type string (String MyString; ) and then using the instance variable
(MyString.Insert).
The statement "instance members are not guaranteed to be thread safe" means
that you could create two threads in your application. If, in both threads,
you refer to the same instance (MyString) and one of them calls .Insert
while the other is assigning a value to the object itself, the CLR does not
guarantee that you will get the same answer every time you do this. In
fact, you could get some pretty weird results.
If you have two threads in your application, and you want to have them share
an object, lock the object before you write to it or read from it. That
way, if both threads try to access it at the same time, one thread will stop
and wait for the other one to unlock the object.
Hope this helps,
--- Nick