Click here to Skip to main content
16,013,322 members

Comments by Robert Ranck (Top 3 by date)

Robert Ranck 15-May-12 12:08pm View    
According to Microsoft's guidelines for .NET Framework classes, when a class implements both a Dispose() method and a Close() method, they should be functionally equivalent. In this particular case, I didn't do any research to verify that for the SerialPort class because I assumed that whoever wrote the MSDN code sample had already done so. Normally I would verify that Close() does a Dispose(), or just use a Close() followed by a Dispose() if the documentation was unclear.
Robert Ranck 15-May-12 11:52am View    
In this specific coding pattern, the only work done inside the finally block is inside an if block which can only possibly be true when an exception has been thrown. So this particular finally block seems equivalent to a catch block.
A using block is appropriate with disposable objects in most cases, but does not address this situation where the object is being created within a method and returned from that method. The calling code will need to be responsible for the disposal of the object. It is therefore intentional that the port.Close remains open during normal execution.
Robert Ranck 15-May-12 11:45am View    
I made an error when entering the simplification, which is now corrected. There is now a 'throw' in the catch clause. So in either set of code, an error should result in the object being disposed if it was created and an exception being thrown.