Isolated Storage is a virtual storage space on the file system that is exclusive to the user and assembly and/or AppDomain. With Isolated Storage, the user is absolved from knowing (or working with) absolute file paths, while still being able to work with the notion of directories, files and streams. This level of isolation makes Isolated Storage an ideal candidate for storing user/application profiles or user-specific configuration settings. With this setup, neither the application code nor the external world (other applications like explorer.exe) can actually see the physical files. Have a look at these articles to see good examples of how Isolated Storage can be used:
http://www.codeproject.com/useritems/appdata.asp
http://www.devcity.net/net/article.aspx?alias=isolatedstorage
The notion of identity and equivalence is fundamental, yet very confusing at times. You might end up in situations where you would not know whether to use Object.Equals, or the == operator (= / Is in VB.NET), or Object.ReferenceEquals. Worse, their semantics vary between Value and Reference types.
Don Box's book had an excellent section on this, and it is paralled by this excellent blog entry by Jon Skeet (MVP) at CSharpFaq.
To summarize (courtesy the Developmentor slides):
- Object.ReferenceEquals tests for object identity
- Object.Equals tests for object equivalence
- Object.GetHashCode tests for possibility of equivalence
- Operator == defaults to identity test (overloadable in C#)
- Types can override Object.Equals and Object.GetHashCode
- Overriding Object.Equals requires overriding Object.GetHashCode
Few notes from MSDN
The default implementation of Equals supports reference equality only, but derived classes can override this method to support value equality. For reference types, equality is defined as object equality; that is, whether the references refer to the same object. For value types, equality is defined as bitwise equality.
Derived classes that override GetHashCode must also override Equals to guarantee that two objects considered equal generate the same hash code; otherwise, the Hashtable usage might not be as expected.