Skip to main content

C# : Interview questions (21-25)

 

  Questions :

    • What is a static class in C#?
    • How do you achieve multiple inheritance in C#?
    • Explain the difference between an abstract class and an interface.
    • What is the purpose of the "using" statement in C#?
    • How does exception handling work in C#?

    Answers :

    Static Class in C#:

    A static class in C# is a class that cannot be instantiated and can only contain static members such as static fields, static methods, and static properties. Static classes are commonly used to organize utility methods or constants that do not require an instance of the class to be created.

    public static class MathHelper 
    {
        public static int Add(int a, int b) 
        {
            return a + b;
        }
    }
    

    In this example, MathHelper is a static class containing a static method Add, which can be accessed without creating an instance of the class (MathHelper.Add(2, 3)).

    Achieving Multiple Inheritance in C#:

    C# does not support multiple inheritance, where a class can inherit from multiple classes. However, you can achieve similar functionality using interfaces, which allow a class to inherit from multiple interfaces.

    interface IShape 
    {
        void Draw();
    }
    
    interface IMovable 
    {
        void Move();
    }
    
    class Circle : IShape, IMovable 
    {
        public void Draw() 
        {
            // Implementation for drawing a circle...
        }
    
        public void Move() 
        {
            // Implementation for moving the circle...
        }
    }
    

    In this example, the Circle class implements both the IShape and IMovable interfaces, effectively achieving multiple inheritance of behavior.

    Difference between Abstract Class and Interface:

    • Abstract Class:

      • An abstract class in C# is a class that cannot be instantiated and may contain abstract methods (methods without a body).
      • An abstract class can contain both abstract and non-abstract (concrete) methods and properties.
      • A class can inherit from only one abstract class.
      • Abstract classes can have access modifiers (public, protected, etc.) for their members.
      • Abstract classes can have fields and constructors.
    • Interface:

      • An interface in C# is a reference type that defines a contract for classes to implement. It contains method signatures, properties, events, and indexers without any implementation.
      • A class can implement multiple interfaces.
      • Interfaces cannot contain fields, constructors, or concrete methods (except for default interface methods introduced in C# 8.0).
      • Interfaces are implicitly public and cannot have access modifiers for their members.

    Purpose of the "using" Statement in C#:

    The "using" statement in C# is used to import namespaces or to manage resources that implement the IDisposable interface. It has two primary purposes:

    • Namespace Importing: The "using" statement simplifies code by allowing you to reference types in a namespace without fully qualifying their names. It helps avoid naming conflicts and makes code more readable.
    using System;
    
    class Program 
    {
        static void Main() 
        {
            Console.WriteLine("Hello, World!");
        }
    }
    
    • Resource Management: The "using" statement can be used to ensure that resources like file handles, database connections, or network sockets are properly disposed of when they are no longer needed, by automatically calling the Dispose method of objects that implement IDisposable.
    using (var stream = new FileStream("file.txt", FileMode.Open)) 
    {
        // Read from the file...
    }
    

    Exception Handling in C#:

    Exception handling in C# allows you to gracefully handle runtime errors and abnormal conditions that occur during the execution of a program. It involves the use of try, catch, finally, and throw keywords.

    • try: The try block encloses the code that might throw an exception.
    • catch: The catch block catches and handles exceptions that are thrown within the try block. It specifies the type of exception to catch.
    • finally: The finally block contains code that is always executed, regardless of whether an exception occurs. It is typically used to release resources or perform cleanup operations.
    • throw: The throw keyword is used to manually throw an exception.
    try 
    {
        // Code that might throw an exception
    }
    catch (Exception ex) 
    {
        // Handle the exception
    }
    finally 
    {
        // Cleanup code
    }
    
    In summary, exception handling in C# allows you to handle errors and ensure the robustness and reliability of your applications.

    Comments

    Popular posts from this blog

    Implementing and Integrating RabbitMQ in .NET Core Application: Shopping Cart and Order API

    RabbitMQ is a robust message broker that enables communication between services in a decoupled, reliable manner. In this guide, we’ll implement RabbitMQ in a .NET Core application to connect two microservices: Shopping Cart API (Producer) and Order API (Consumer). 1. Prerequisites Install RabbitMQ locally or on a server. Default Management UI: http://localhost:15672 Default Credentials: guest/guest Install the RabbitMQ.Client package for .NET: dotnet add package RabbitMQ.Client 2. Architecture Overview Shopping Cart API (Producer): Sends a message when a user places an order. RabbitMQ : Acts as the broker to hold the message. Order API (Consumer): Receives the message and processes the order. 3. RabbitMQ Producer: Shopping Cart API Step 1: Install RabbitMQ.Client Ensure the RabbitMQ client library is installed: dotnet add package RabbitMQ.Client Step 2: Create the Producer Service Add a RabbitMQProducer class to send messages. RabbitMQProducer.cs : using RabbitMQ.Client; usin...

    How Does My .NET Core Application Build Once and Run Everywhere?

    One of the most powerful features of .NET Core is its cross-platform nature. Unlike the traditional .NET Framework, which was limited to Windows, .NET Core allows you to build your application once and run it on Windows , Linux , or macOS . This makes it an excellent choice for modern, scalable, and portable applications. In this blog, we’ll explore how .NET Core achieves this, the underlying architecture, and how you can leverage it to make your applications truly cross-platform. Key Features of .NET Core for Cross-Platform Development Platform Independence : .NET Core Runtime is available for multiple platforms (Windows, Linux, macOS). Applications can run seamlessly without platform-specific adjustments. Build Once, Run Anywhere : Compile your code once and deploy it on any OS with minimal effort. Self-Contained Deployment : .NET Core apps can include the runtime in the deployment package, making them independent of the host system's installed runtime. Standardized Libraries ...

    Clean Architecture: What It Is and How It Differs from Microservices

    In the tech world, buzzwords like   Clean Architecture   and   Microservices   often dominate discussions about building scalable, maintainable applications. But what exactly is Clean Architecture? How does it compare to Microservices? And most importantly, is it more efficient? Let’s break it all down, from understanding the core principles of Clean Architecture to comparing it with Microservices. By the end of this blog, you’ll know when to use each and why Clean Architecture might just be the silent hero your projects need. What is Clean Architecture? Clean Architecture  is a design paradigm introduced by Robert C. Martin (Uncle Bob) in his book  Clean Architecture: A Craftsman’s Guide to Software Structure and Design . It’s an evolution of layered architecture, focusing on organizing code in a way that makes it  flexible ,  testable , and  easy to maintain . Core Principles of Clean Architecture Dependency Inversion : High-level modules s...