Any operation invocation may throw a run-time exception (see Section 14.9 on page 427) and, if the operation has an exception specification, may also throw user exceptions (see
Section 14.9 on page 427). Suppose we have the following simple interface:
Typically, you will catch only a few exceptions of specific interest around an operation invocation; other exceptions, such as unexpected run-time errors, will typically be handled by exception handlers higher in the hierarchy. For example:
This code handles a specific exception of local interest at the point of call and deals with other exceptions generically. (This is also the strategy we used for our first simple application in
Chapter 15.)
Note that the ToString method of exceptions prints the name of the exception, any inner exceptions, and the stack trace. Of course, you can be more selective in the way exceptions are displayed. For example,
e.GetType().Name returns the (unscoped) name of an exception.
The Ice run time makes no guarantees about the state of out-parameters when an operation throws an exception: the parameter may still have its original value or may have been changed by the operation’s implementation in the target object. In other words, for out-parameters, Ice provides the weak exception guarantee
[21] but does not provide the strong exception guarantee.
1