C# Tutorial

C# Tutorial C# First Application C# Variables C# Data Types C# Operators C# Keywords

C# Control Statement

C# If Statements C# Switch Statements C# for Loop C# While Loop C# do While loop C# Jump Statements C# Function C# functions with out variable

C# Arrays

C# Arrays

C# Function

C# Function call by value C# Call by reference C# Passing array to function C# Multidimensional Arrays C# Jagged Arrays C# Params C# Array Class C# Command Line Arguments

C# Object Class

C# Object and Classes C# Constructors C# Destructor C# this Keyword C# static field C# static class C# Static Constructor C# Structs C# enum C# Properties

C# Inheritance

C# Inheritance C# Multilevel Inheritance C# Aggregation C# Member overloading C# Method Overriding C# Base

C# Polymorphism

C# Polymorphism C# Sealed

C# Abstraction

C# Abstraction C# Interface

C# Namespace

C# Namespace C# Access Modifiers C# Encapsulation

C# Strings

C# String

C# Misc

C# Design Patterns Dictionary in C# Boxing and Unboxing in C# Ref and Out in C# Serialization in C# Dispose and Finalize in C# CONSOLE LOG IN C# Get File extension in C# Insert query in c# Difference Between List and Dictionary in C# Getters and Setters in C# Extension Methods in C# Insert query in c# CONSOLE LOG IN C# Get File extension in C# Random.NextDouble() Method in C# Binary Search in C# Difference between Delegates and Interfaces in C# Double.IsFinite() Method in C# Index Constructor in C# Abstraction in C# Basic OOPS Concepts In C# Queue.CopyTo() Method in C# single.compareto() method in C# C# Throw Exception in Constructor DECODE IN C# file.setlastwritetimeutc() method in C# Convert Object to List in C# convert.ToSByte(string, IFormatProvider) Method in C# C# Declare Delegate in Interface console.TreatControl C As Input property in C# Copying the queue elements to 1-D Array in C# Array.Constrainedcopy() Method in C# C# in and out Char.IsLetterOrDigit() method in C# Debugging in C# decimal.compare() method in C# Difference between Console.Read and Console.Readline in C# Metadata in C# C# Event Handler Example Default Interface Methods in C# Difference between hashtable and dictionary in C# C# program to implement IDisposable Interface Encapsulation in C# SortedList.IndexOfVaalue(Object) Method in C# Hash Maps in C# How to clear text files in C# How to Convert xls to xlsx in C# Foreach loop in C# FIFO in C# How to handle null exception in C# Type.Is Instance Of Type() Method in C# How to add data into MySQL database using C# How to use angular js in ASP net Csharp decimal.compare() method in Csharp Difference between Console.Read and Console.Readline in Csharp How to Implement Interface in Csharp char.IsUpper() Method in C# Index Of Any() Method in C# Quantifiers in C# C# program to Get Extension of a Given File C# Error Logging C# ENCRIPTION Can we create an object for Abstract Class in C# Console.CursorVisible in C# SortedDictionary Implementation in C# C# Hash Table with Examples Setting the Location of the Label in c# Collections in c# Virtual Keyword in C# Reverse of string in C# String and StringBuilder in C# Encapsulation in C# SortedList.IndexOfVaalue(Object) Method in C# Hash Maps in C# How to clear text files in C# How to Convert xls to xlsx in C# Foreach loop in C# FIFO in C# How to handle null exception in C# Type.Is Instance Of Type() Method in C# How to add data into MySQL database using C# How to use angular js in ASP net Csharp decimal.compare() method in Csharp Difference between Console.Read and Console.Readline in Csharp How to Implement Interface in Csharp char.IsUpper() Method in C# Index Of Any() Method in C# Quantifiers in C# C# program to Get Extension of a Given File Difference between ref and out in C# Singleton Class in C# Const And Readonly In Csharp BinaryReader and BinaryWriter in C# C# Attributes C# Delegates DirectoryInfo Class in C# Export and Import Excel Data in C# File Class in C# FileInfo Class in C# How to Cancel Parallel Operations in C#? Maximum Degree of Parallelism in C# Parallel Foreach Loop in C# Parallel Invoke in C# StreamReader and StreamWriter in C# TextReader and TextWriter in C# AsQueryable() in C# Basic Database Operations Using C# C# Anonymous Methods C# Events C# Generics C# Indexers C# Multidimensional Indexers C# Multithreading C# New Features C# Overloading of Indexers Difference between delegates and events in C# Operator overloading in C# Filter table in C# C# Queue with Examples C# Sortedlist With Examples C# Stack with Examples C# Unsafe Code File Handling in C# HashSet in C# with Examples List Implementation in C# SortedSet in C# with Examples C# in Depth Delegates and Events in C# Finally Block in C# How to Split String in C# Loggers in C# Nullable Types in C# REVERSE A STRING IN C# TYPE CASTING IN C# What is Generics in C# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# ABSTRACT CLASS IN C# Application of pointer in C# Await in c# READONLY AND CONSTANT IN C# Type safe in C# Types of Variables in c# Use of delegates in c# Atomic Methods Thread Safety and Race Conditions in C# Parallel LINQ in C# Design Principles in C# Difference Between Struct And Class In C# Difference between Abstraction and Encapsulation in C# Escape Sequence Characters in C# What is IOC in C# Multiple Catch blocks in C# Appdomain in C# Call back methods in C# Change Datetime format in C# Declare String array in C# Default Access Specifier in c# Foreach in LINQ C# How to compare two lists in C# How to Convert String to Datetime in c# How to get only Date from DateTime in C# Ispostback in asp net C# JSON OBJECT IN C# JSON STRINGIFY IN C# LAMBDA FUNCTION IN C# LINQ Lambda Expression in C# Microservices in C# MSIL IN C# Reference parameter in C# Shadowing(Method hiding) in C# Solid principles in C# Static Members in C# Task run in C# Transaction scope in C# Type Conversion in c# Unit of Work in C# Unit Test Cases in c# User Defined Exception in c# Using Keyword in C# Var Keyword in C# What is gac in C#

Singleton Class in C#

Introduction

According to the singleton design pattern, a single object may only be created using a single class instance in C#. It enables a single point for getting to that instance and ensures it will only ever be one instance of the class across the whole program.

Syntax:

public sealed class Singleton

{

    private static readonly Singleton instance = new Singleton ();

    private Singleton ()

    {

    }

    public static Singleton Instance

    {

        get

        {

            return instance;

        }

    }

}
  • The class can't be inherited thanks to the sealed keyword.
  • A single static instance of the class is stored in the private static read-only field instance, which is eagerly initialized.
  • The class cannot be externally instantiated, thanks to the private constructor.
  • Accessing the single instance of the class is made possible via the public static property or method Instance.
  • The singleton class can have additional members and functions as necessary.

Example:

using System;

public sealed class Singleton

{

    private static readonly Singleton instance = new Singleton ();

    private Singleton ()

    {

    }

    public static Singleton Instance

    {

        get

        {

            return instance;

        }

    }

    public void PrintMessage(string message)

    {

        Console.WriteLine("Singleton Instance: " + message);

    }

}

public class Program

{

    public static void Main ()

    {

        Singleton s1 = Singleton.Instance;

        Singleton s2 = Singleton.Instance;

        s1. PrintMessage("Welcome");

        Console.WriteLine(s1 == s2);

    }

}

This syntax

  • The single instance of the class is stored in a private static field called instance for the Singleton class.
  • A private static read-only object used for thread synchronization is the lockObject field.
  • The singleton class cannot be created externally thanks to the private constructor.
  • Access to the singleton instance is made possible through the Instance attribute.
  • A double-check locking method is utilized inside the get accessor of the Instance property to guarantee thread safety while the instance is being created.

To avoid needless locking if the instance has already been generated, the initial check (if (instance == null)) determines whether the instance is already null.

The lock statement is used to acquire a lock if the instance is null, ensuring that only one thread may access the code block contained within the lock at once.

In order to stop another thread from generating a duplicate instance while waiting for the lock, a second check (if (instance == null)) is made inside the lock to make sure the instance is still null.

Instance = new Singleton (); is used to ensure instance if it is still null.

The constructed instance is then returned through the Instance property.

Output:

Singleton Class in C#

Singleton class forms in C#

Implementing a singleton class in C# might take many shapes or guises. Listed below are a few typical forms:

1. Eager initialization

  • The singleton class instance is eagerly constructed in this way during class loading.
  • Since the instance is generated before any thread can access it, the singleton's thread safety is ensured.
    public sealed class Singleton

    {

        private static readonly Singleton instance = new Singleton ();

        private Singleton () {}

        public static Singleton Instance => instance;

    }

    2. Lazy initialization

    • This arrangement generates the singleton class object passively or at accessing time.
    • By waiting until an instance is needed, it offers superior performance.
    using System;

    public sealed class Singleton

    {

        private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton> (() => new Singleton ());

        private Singleton ()

        {

        }

        public static Singleton Instance => lazyInstance.Value;

    }

    3. Initialization using double-check locking that is thread-safe

    • While permitting lazy initialization, this style provides thread safety.
    • Access to the instance creation code is synchronized via a lock statement.
    using System;

    public sealed class Singleton

    {

        private static Singleton instance;

        private static readonly object lockObject = new object ();

        private Singleton ()

        {

        }

        public static Singleton Instance

        {

            get

            {

                if (instance == null)

                {

                    lock (lockObject)

                    {

                        if (instance == null)

                        {

                            instance = new Singleton ();

                        }

                    }

                }

                return instance;

            }

        }

    }

    Purpose:

    1. Global Access: A singleton offers a single point of access to its instance available anywhere in the world. It might be helpful when you need to use a shared resource or keep track of a centralized state that can be accessed from other application areas.
    2. Resource management: Singleton classes may be used to manage resources like database connections, file systems, and network connections that should only have a single instance. You may prevent resource conflicts and effectively manage resource allocation and deallocation by assuring a single instance.
    3. Configuration Settings: Singleton classes are frequently used to maintain configuration parameters for the whole program. You may load the configuration only once and distribute it among other application components using a singleton.
    4. Thread Safety: Singleton classes may be built to address thread-safety issues, guaranteeing that even in multi-threaded settings, only one instance is produced. Race situations and concurrency concerns may be avoided as a result.