. The object life cycle of net component programming
- . NET Garbage Collection
- IDisposable ()
- Using statement
. NET Garbage Collection
It is the CLR that manages the garbage collector, the garbage collector monitors the managed heap, and the objects we use, as well as the prerequisite object information that is required for system startup, exist on the managed heap, and the CLR maintains a list (the object reference Information list). The information stored in this list is the information that corresponds to all objects in the managed heap (references, referenced information) whenever a new object is used or a reference to an existing object is changed the CLR updates the list of object reference information. So when does the collector usually call?
Most of the garbage collector is triggered when the managed heap is exhausted, or it can be called through code (described below).
At the time of the garbage collector's invocation, it is traversed from (the object reference information list) to see if each object is reachable to the client (the application using these objects), and if so, the object is tagged to reach and skips it (to see if the object has a reference), and continues to traverse the And the object referenced by the tagged object will not be checked again. When the objects are not referenced by the object, the objects are reclaimed and spatially compressed, and the addresses that have the referenced objects are modified for spatial compression.
IDisposable ()
In. NET provides us with the IDispose interface is used to release resources, see a sample code:
1 Public InterfaceIMyInterface2 {3 voiddosomething ();4 }5 Public classstydyclass:imyinterface,idisposable6 {7 Public voidDispose ()8 {9 //Freeing ResourcesTen } One Public voiddosomething () A { - //Do something - } the}
Look at the client calling code:
1 imyinterface studyclass = new Studyclass (); 2 studyclass.dosomething (); 3 as IDisposable; 5 null 6 7 disposable. Dispose (); 8 }
This is safe to call, and if Studyclass does not support the Idisposable,as operator, it will return a null value, which seems to be fine, but if the client object is shared, there are many objects that use it. Who exactly is to execute idisposable.dispose (). If there are some errors when the dosomething () function executes, will the resources be released?
using Statement
C # supports using statements that help us generate a try/finally block that uses the Dispose () method when using statements, and of course your object must support IDisposable first. Take a look at the sample code:
1 using New Studyclass ()) 2 {3 studyclass.dosomething (); 4 }
If you write this way, the compilation will not pass, and you will be prompted that the type used in the using statement must be implicitly convertible to System.IDisposable. Of course, there are ways to get such code compiled through, so that the IMyInterface interface is also derived from IDisposable. After that, you can write the code like this:
1IMyInterface Studyclass =NewStudyclass ();2 using(Studyclass asIDisposable)3 {4 studyclass.dosomething ();5 }6 7 using(Studyclass Studyclass =NewStudyclass ())8 {9 studyclass.dosomething ();Ten}
The above writing method can be achieved, the above two code is equal to the following code:
1Studyclass Studyclass =NewStudyclass ();2 Try3 {4 studyclass.dosomething ();5 }6 finally7 {8 if(Studyclass! =NULL)9 {TenIDisposable dis =Studyclass; One Dis. Dispose (); A } -}
The content of this article is not very complicated and profound, but the basic explanation of the object's life cycle management, there are some in-depth knowledge is not to explain, and some of us in the object-oriented design, ready for some important high-usage objects for the abstract design, As far as possible to let the abstract object to implement the IDisposable interface, so there is no error message in the above content.
Jinyuan
Source: http://www.cnblogs.com/jin-yuan/
This article is copyrighted by the author and the blog Park, welcome reprint, but without the consent of the author must retain this statement, and on the article page