finally keyword in C# is an important component of exception handling. It makes sure that specific cleanup code is always executed, whether an exception is thrown or not. This makes it ideal for releasing resources such as file handles, database connections, or network streams. The finally block is used in conjunction with try and catch blocks.
- The finally block always executes, even if an exception occurs or a return statement is used in the try or catch blocks.
- A finally block can be used without a catch block, making it versatile for scenarios where exceptions are not explicitly handled.
- It is primarily used to release or clean up resources like file streams or database connections.
- The finally block does not allow control transfer statements such as return, break, or continue.
Example 1: Basic Usage of finally
C#
// C# Program to demonstrate
// the use of finally block
using System;
class Geeks
{
static void Main()
{
try
{
// Simulating an exception
Console.WriteLine("Inside try block");
throw new Exception("An error occurred!");
}
catch (Exception ex)
{
// Handling the exception
Console.WriteLine($"Caught exception: {ex.Message}");
}
finally
{
// Cleanup code
Console.WriteLine("Finally block executed");
}
}
}
OutputInside try block
Caught exception: An error occurred!
Finally block executed
Explanation: In the above example, the try block throws an exception. The catch block handles the exception. The finally block executes cleanup code and makes sure it runs regardless of exceptions.
Syntax of finally
try
{ // Code that may throw an exception }
catch (ExceptionType e)
{ // Code to handle the exception }
finally
{ // Cleanup code that always executes }
Important Points:
- In C#, multiple finally blocks in the same program are not allowed.
- The finally block does not contain any return, continue, break statements because it does not allow controls to leave the finally block.
- You can also use finally block only with a try block means without a catch block but in this situation, no exceptions are handled.
- The finally block will be executed after the try and catch blocks, but before control transfers back to its origin.
Example 2: Using finally Without a catch Block
C#
// C# Program of finally without catch block
using System;
class Geeks
{
static void Main()
{
try
{
// Code that may cause an exception
Console.WriteLine("Opening a file..");
}
finally
{
// Always executed, even without a catch block
Console.WriteLine("File closed successfully.");
}
}
}
OutputOpening a file..
File closed successfully.
Explanation: In this example, the finally block ensures the file is closed even though no exception handling (catch) is implemented.
Example 3: Using finally With Handled Exceptions
C#
// C# Program with finally block
// handling handled exception
using System;
class Geeks
{
static void Main()
{
try
{
// Trying to divide by zero at runtime
Console.WriteLine("Inside try block");
int numerator = 10;
int denominator = 0;
int res = numerator / denominator;
Console.WriteLine("Result of division: " + res);
}
catch (DivideByZeroException)
{
// Handling the exception
Console.WriteLine("Caught: Cannot divide by zero");
}
finally
{
Console.WriteLine("Finally block executed.");
}
}
}
OutputInside try block
Caught: Cannot divide by zero
Finally block executed.
Explanation: In the above example the try block raises a DivideByZeroException. The catch block handles it, and the finally block ensures cleanup.
Example 4: Using finally With Unhandled Exceptions
C#
// C# Program with finally block handling
// runtime division by zero exception
using System;
class Geeks
{
static void Main()
{
try
{
// Trying to divide by zero at runtime
Console.WriteLine("Attempting division...");
int numerator = 10;
int denominator = 0;
// Simulating runtime division by zero
int res = numerator / denominator;
Console.WriteLine("Result of division: " + res);
}
catch (DivideByZeroException ex)
{
// Handling the divide by zero exception
Console.WriteLine("Caught exception: " + ex.Message);
}
finally
{
// Executes even though the exception is handled
Console.WriteLine("Finally block executed");
}
}
}
OutputAttempting division...
Caught exception: Attempted to divide by zero.
Finally block executed
Explanation: In the above example, the try block raises an exception DivideByZeroException, that is not handled, but the finally block still executes, ensuring cleanup is performed.
Similar Reads
C# Tutorial C# (pronounced "C-sharp") is a modern, versatile, object-oriented programming language developed by Microsoft in 2000 that runs on the .NET Framework. Whether you're creating Windows applications, diving into Unity game development, or working on enterprise solutions, C# is one of the top choices fo
4 min read
Introduction to .NET Framework The .NET Framework is a software development framework developed by Microsoft that provides a runtime environment and a set of libraries and tools for building and running applications on Windows operating systems. The .NET framework is primarily used on Windows, while .NET Core (which evolved into
6 min read
C# Interview Questions and Answers C# is the most popular general-purpose programming language and was developed by Microsoft in 2000, renowned for its robustness, flexibility, and extensive application range. It is simple and has an object-oriented programming concept that can be used for creating different types of applications.Her
15+ min read
C# Dictionary Dictionary in C# is a generic collection that stores key-value pairs. The working of Dictionary is quite similar to the non-generic hashtable. The advantage of a Dictionary is, that it is a generic type. A dictionary is defined under System.Collections.Generic namespace. It is dynamic in nature mean
5 min read
C# List Class In C#, the List<T> class represents the list of objects that can be accessed by index. It comes under the System.Collections.Generic namespace. List class can be used to create a collection of different types like integers, strings, etc. List<T> class also provides the methods to search,
7 min read
C# Delegates A delegate is an object which refers to a method or you can say it is a reference type variable that can hold a reference to the methods. It provides a way which tells which method is to be called when an event is triggered. For example, if you click on a Button on a form (Windows Form application),
6 min read
ASP.NET Interview Questions and Answer ASP.NET is a popular framework by Microsoft for building fast and scalable web applications. It allows developers to create dynamic websites, services, and apps, using server-side code and offering a user-friendly experience. Trusted by companies like Microsoft, Dell, and Accenture, ASP.NET is used
15+ min read
C# .NET Framework (Basic Architecture and Component Stack) C# (C-Sharp) is a modern, object-oriented programming language developed by Microsoft in 2000. It is a part of the .NET ecosystem and is widely used for building desktop, web, mobile, cloud, and enterprise applications. This is originally tied to the .NET Framework, C# has evolved to be the primary
6 min read
C# Data Types Data types specify the type of data that a valid C# variable can hold. C# is a strongly typed programming language because in C# each type of data (such as integer, character, float, and so forth) is predefined as part of the programming language and all constants or variables defined for a given pr
7 min read
C# Arrays An array is a group of like-typed variables that are referred to by a common name. And each data item is called an element of the array. The data types of the elements may be any valid data type like char, int, float, etc. and the elements are stored in a contiguous location. Length of the array spe
8 min read