Strong reference vs Weak reference in .NET

Recently i came across the concept of weak reference so i thought i should share it with people.

In .net if you declare a variable of non primitive type you are defining a strong reference. To understand better consider that if you assign such variable to a static variable which in return in reference by other variables then a graph of uncollected references will be formed. Which may result in memory leak or may be a requirement of the application (to be disposed later on). In my case i had this scenario where a message box was referring to a form which was not released even the message-box was disposed. So i had to change it to a weak reference.

A week reference can also hold reference to other object but when collected it is assigned a null so unhook all the events. It is perfectly suitable in my example where i can use a wrapper to weak reference. The only difference between strong and week reference is that when collected the weak reference becomes null.