C#.Net Interview Q & A
C#.Net Intermediate Level Interview Questions & Answers
- What is the difference between IEnumerable and IQueryable in C#?
Answer: IEnumerable is used for querying in-memory collections, while IQueryable is used for querying databases, as it provides deferred execution. - What is the purpose of the using statement in C#?
Answer: The using statement is used for resource management, especially for automatically disposing of objects implementing IDisposable. - Explain the concept of garbage collection in C#.
Answer: Garbage collection is the process of automatically reclaiming memory occupied by objects that are no longer in use. It ensures efficient memory management. - What is boxing and unboxing in C#?
Answer: Boxing is the process of converting a value type to a reference type, while unboxing is the reverse process. It involves casting and can impact performance. - Describe the difference between a deep copy and a shallow copy.
Answer: A deep copy duplicates both the object and its referenced objects, creating a completely independent copy. A shallow copy duplicates the object itself but not its referenced objects. - What is the purpose of the async and await keywords in C#?
Answer: async is used to declare an asynchronous method, while await is used to indicate where the method can yield control to the calling code while it’s waiting for an asynchronous operation to complete. - Explain what a delegate is and why it is used in C#.
Answer: A delegate is a type that represents references to methods. It is used for defining callback methods and implementing event handling. - What is an event in C#? How is it different from a delegate?
Answer: An event is a mechanism for allowing a class to provide notifications about changes to its state. It encapsulates a delegate and provides more control over who can subscribe to the event. - What is the difference between string and StringBuilder in C# when working with strings?
Answer: string is immutable, while StringBuilder is mutable. string creates a new string when modified, whereas StringBuilder modifies the existing string in place, making it more efficient for string manipulation. - Explain the concept of polymorphism in C#.
Answer: Polymorphism allows objects of different types to be treated as objects of a common base type. It’s achieved through method overriding and interfaces. - What are the SOLID principles in C# and why are they important?
Answer: SOLID is an acronym for five design principles (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) that promote clean, maintainable, and extensible code. - What is dependency injection in C#?
Answer: Dependency injection is a design pattern in which the dependencies of a class are provided from the outside, rather than being created within the class itself. It promotes loose coupling and easier testing. - What is a lambda expression in C#?
Answer: A lambda expression is a concise way to define anonymous methods or functions. It simplifies delegate and event handler definitions. - Explain the purpose of the try, catch, and finally blocks in exception handling.
Answer: The try block contains code that may raise an exception. The catch block handles exceptions, and the finally block contains cleanup code that always executes, regardless of exceptions. - What is an extension method in C#?
Answer: An extension method allows you to add new methods to existing types without modifying their source code. It’s defined in a static class and is a way to extend the behavior of types. - What is the purpose of the yield keyword in C#?
Answer: The yield keyword is used in iterator methods to return elements one at a time, enabling deferred execution and conserving memory. - Explain the use of the ref and out keywords in method parameters.
Answer: ref is used for two-way parameter passing, allowing a method to modify the value of the parameter. out is similar but doesn’t require the parameter to be initialized before the method call. - What is the purpose of the lock statement in C#?
Answer: The lock statement is used to create a critical section in multithreaded code, ensuring that only one thread can access the locked code block at a time. - What is the difference between IEnumerable and IEnumerator?
Answer: IEnumerable represents a collection of items, while IEnumerator is used to iterate over those items, providing methods like MoveNext and Current. - How do you implement a custom exception in C#?
Answer: To create a custom exception, you should derive from the Exception class or one of its existing derived classes, and provide a constructor to set relevant data. - Explain the difference between the async/await pattern and using multi-threading for parallelism.
Answer: async/await is used for asynchronous programming, which is non-blocking and typically more efficient for I/O-bound operations. Multi-threading involves creating and managing multiple threads to run tasks concurrently. - What is a delegate in C# and when would you use it?
Answer: A delegate is a type that represents a reference to a method. It is used for defining callback methods and implementing event handling. Delegates are useful when you want to pass methods as arguments or create extensible and flexible systems. - Explain the role of the using statement in C#.
Answer: The using statement is used for resource management, especially for automatically disposing of objects that implement the IDisposable interface. It helps ensure that resources are properly released. - What is asynchronous programming, and how is it implemented in C#?
Answer: Asynchronous programming is a technique that allows non-blocking execution of code. In C#, it is implemented using the async and await keywords, which enable tasks to be executed concurrently without blocking the main thread. - What is a memory leak in C#, and how can it be prevented?
Answer: A memory leak occurs when objects are not properly disposed of, causing them to consume memory indefinitely. It can be prevented by using proper resource management and disposing of objects implementing IDisposable. - What is the purpose of the lock statement in C#?
Answer: The lock statement is used to create a critical section in multithreaded code, ensuring that only one thread can access the locked code block at a time. It prevents data corruption due to concurrent access. - How does C# support multiple inheritance through interfaces?
Answer: C# does not support multiple inheritance of classes, but it allows a class to implement multiple interfaces. This enables a class to inherit behavior from multiple sources while avoiding the issues of multiple inheritance. - What are the different types of access modifiers in C#?
Answer: C# provides several access modifiers, including public, private, protected, internal, protected internal, and private protected. These modifiers control the visibility and accessibility of class members. - Explain what an abstract class is in C# and how it differs from an interface.
Answer: An abstract class is a class that cannot be instantiated and may contain abstract methods. It can also include concrete methods. An interface, on the other hand, defines a contract of methods that implementing classes must provide, but it cannot contain method implementations. - What are attributes in C#, and how are they used?
Answer: Attributes are metadata annotations that can be applied to code elements like classes, methods, and properties. They provide information about the code or change its behavior. Attributes are commonly used for metadata, code generation, and documentation. - How does the foreach loop work in C# when iterating through collections?
Answer: The foreach loop simplifies iteration through collections. It automatically handles collection enumeration and provides a read-only view of the collection’s elements. It works with any type that implements IEnumerable or IEnumerable<T>. - What is the purpose of the using directive in C#?
Answer: The using directive is used to import namespaces, making types and members within those namespaces accessible in the current code file. It simplifies code by eliminating the need to fully qualify types. - What is the difference between an abstract class and an interface in C#?
Answer: An abstract class can contain method implementations and fields, while an interface can only declare method signatures and properties without implementations. A class can inherit from one abstract class but implement multiple interfaces. - How is method overloading different from method overriding in C#?
Answer: Method overloading involves defining multiple methods in the same class with the same name but different parameter lists. Method overriding occurs when a derived class provides a specific implementation for a method declared in a base class, using the override keyword. - What is a delegate in C#?
Answer: A delegate is a type that represents references to methods. It allows methods to be assigned as delegates and invoked through them. Delegates are commonly used for event handling and callbacks. - What is the difference between StringBuilder and String in C#?
Answer: StringBuilder is mutable and allows you to modify its contents, while String is immutable, meaning you cannot change its value once it’s assigned. - What is the purpose of the foreach loop in C#?
Answer: The foreach loop is used to iterate over collections like arrays, lists, and dictionaries without needing to specify indices. - Explain the concept of method overloading in C#.
Answer: Method overloading allows you to define multiple methods with the same name in the same class, but with different parameter lists. - What is the null value in C#?
Answer: null represents the absence of a value. It can be assigned to reference types and indicates that the reference doesn’t point to any object. - How does C# handle exceptions, and what is the purpose of the try-catch block?
Answer: C# uses the try-catch block to handle exceptions. Code that may raise an exception is placed in the try block, and error handling is done in the catch block. - What are delegates in C#?
Answer: Delegates are type-safe function pointers that hold references to methods. They allow you to invoke methods dynamically. - How does the using statement differ from the try-finally block in C#?
Answer: The using statement is used for resource management and automatically disposes of objects when they go out of scope. The try-finally block ensures that specific code executes before leaving a block of code. - What is a lambda expression in C#?
Answer: A lambda expression is a concise way to define anonymous methods. It is often used for delegates and functional programming. - What is the var keyword in C# used for?
Answer: The var keyword is used for implicit typing, allowing the C# compiler to determine the data type of a variable based on the assigned value. - What is a property in C#?
Answer: A property is a member of a class that provides a flexible way to read, write, or compute the value of a private field. - What is the difference between a value type and a reference type in C#?
Answer: Value types hold their data directly, while reference types store a reference to their data. Value types include int, float, and bool, while reference types include classes and interfaces. - What are extension methods in C#?
Answer: Extension methods allow you to add methods to existing types without modifying their source code. They are defined in static classes. - What is the purpose of the static keyword in C#?
Answer: The static keyword is used to define members that belong to the type itself rather than to instances of the type. For example, static methods are called on the class itself, not on instances. - How does C# support multiple inheritance, and what is the use of interfaces?
Answer: C# doesn’t support multiple class inheritance, but it supports multiple interface inheritance. Interfaces define a contract for classes to implement. - Explain the differences between out and ref parameters in C#.
Answer: out parameters must be assigned within the method, while ref parameters can have a value before entering the method. ref parameters can be used for two-way communication. - What is the purpose of the is and as operators in C#?
Answer: The is operator checks if an object is of a certain type, while the as operator attempts to cast an object to a specified type. - What are anonymous types in C#?
Answer: Anonymous types are used to create objects with read-only properties based on a specific data structure. - How do you implement custom exceptions in C#?
Answer: Custom exceptions can be implemented by creating classes that derive from the Exception class or its subclasses. - What is a namespace in C# and why is it important?
Answer: A namespace is used to organize code into logical groups. It helps prevent naming conflicts and improves code organization. - How do you create a thread in C# for multi-threading?
Answer: You can create a thread by instantiating the System.Threading.Thread class and passing a method to it. - What is the purpose of the async and await keywords in C#?
Answer: The async and await keywords are used to write asynchronous code in a more readable and maintainable way, allowing non-blocking execution of tasks. - How do you implement IDisposable and finalize objects in C#?
Answer: You implement IDisposable for deterministic cleanup and finalize for non-deterministic cleanup using the destructor (~ClassName) in the class. - What is an attribute in C#?
Answer: An attribute is a way to add metadata to your program elements, such as classes, methods, and properties. They can be used for reflection and code analysis. - What is a delegate in C# and how does it work?
Answer: A delegate is a type-safe function pointer that points to one or more methods. You can invoke a delegate to execute the referenced methods. - How does garbage collection work in C#?
Answer: Garbage collection is an automatic process in C# that reclaims memory by identifying and freeing objects no longer in use. The .NET runtime manages the process. - Explain the purpose of the extern keyword in C#.
Answer: The extern keyword is used for platform invocation services and is commonly used with C/C++ code. It indicates that a method is implemented externally. - What are indexers in C#?
Answer: Indexers are special properties in C# that allow you to access objects using array-like syntax. They are defined using this keyword and can be used for collection-like classes. - What is a C# tuple, and when would you use it?
Answer: A tuple is a data structure that can store multiple values of different types. It is used when you need to return multiple values from a method or function. - What is a nullable type in C#?
Answer: A nullable type can hold a normal value or be null. It is useful when you need to represent the absence of a value in value types like int, double, or DateTime. - How does C# support asynchronous programming?
Answer: C# supports asynchronous programming using the async and await keywords, which allow you to write asynchronous code without blocking the main thread. - What is a design pattern, and why are they important in C# development?
Answer: Design patterns are reusable solutions to common software design problems. They provide a blueprint for structuring code and improving maintainability, scalability, and readability. - What is Dependency Injection (DI) in C#, and why is it useful?
Answer: Dependency Injection is a design pattern that allows you to inject the dependencies of a class from the outside. It promotes loose coupling and testability. - What is the Observer pattern, and how is it implemented in C#?
Answer: The Observer pattern is used for one-to-many object communication. In C#, it is implemented using events and delegates to notify multiple observers when a subject’s state changes. - What is the Factory Method pattern, and when would you use it?
Answer: The Factory Method pattern is a creational pattern used to create objects without specifying the exact class of object that will be created. It’s used when a class cannot anticipate the type of objects it needs to create. - How does C# support asynchronous programming, and what are the benefits?
Answer: C# supports asynchronous programming through async and await keywords, allowing non-blocking execution. Benefits include improved responsiveness, resource efficiency, and better user experience. - What is the Decorator pattern in C#, and how is it used?
Answer: The Decorator pattern allows you to attach additional responsibilities to objects dynamically. It is implemented by creating a set of decorator classes that are used to wrap concrete components. - Explain the SOLID principles in C# development.
Answer: SOLID is an acronym for five principles of object-oriented design: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion. They promote clean, maintainable, and extensible code. - What is the .NET Core framework, and how does it differ from the .NET Framework?
Answer: .NET Core is an open-source, cross-platform framework for building applications. It is modular, lightweight, and designed to work on Windows, Linux, and macOS. The .NET Framework is Windows-specific. - Explain the differences between value types and reference types in C#.
Answer: Value types store data directly, while reference types store references to data. Value types include int, double, and bool, while reference types include classes and interfaces. - What is the C# using directive, and how is it used?
Answer: The using directive is used to include a namespace in your program. It simplifies coding by providing shortcuts to classes and methods in that namespace. - What is the difference between ref and out parameters in C#?
Answer: ref parameters are initialized before being passed to a method, while out parameters are not required to be initialized before passing them to a method. In both cases, changes to the parameters inside the method are reflected in the caller. - Explain what boxing and unboxing are in C#.
Answer: Boxing is the process of converting a value type to a reference type (e.g., int to object), and unboxing is the reverse process, converting a boxed value back to its original value type. - What is the purpose of the using statement in C#?
Answer: The using statement is used for resource management and ensures that an IDisposable object is properly disposed of when it goes out of scope. - What is a delegate in C#?
Answer: A delegate is a type that represents a reference to a method. It allows methods to be passed as parameters, stored as data, and invoked dynamically. - What is an event in C#?
Answer: An event is a mechanism for communication between objects in C#. It allows one class to notify other classes when something of interest happens. - What is the purpose of the async and await keywords in C#?
Answer: The async keyword marks a method as asynchronous, and the await keyword is used to indicate points at which the execution can be paused to allow other work to proceed. It’s commonly used for asynchronous programming. - Explain the difference between List and Array in C#.
Answer: Lists are dynamic collections that can grow or shrink in size, while arrays have a fixed size. Lists are part of the System.Collections.Generic namespace, offering more functionality and flexibility. - What is the purpose of the yield keyword in C#?
Answer: The yield keyword is used to create iterator methods that can be used to iterate over a collection or sequence of data without loading the entire collection into memory. - What is the try-catch-finally block used for in C#?
Answer: The try-catch-finally block is used for handling exceptions. Code that may throw an exception is placed in the try block, and error handling is done in the catch block. The finally block is used for cleanup code that always executes. - Explain what garbage collection is in C#.
Answer: Garbage collection is the automatic process of identifying and reclaiming unused memory occupied by objects that are no longer reachable in the program. It helps manage memory in a C# application. - How do you implement a property in C#?
Answer: Properties are implemented using get and set accessors. Here’s an example: csharp private int _myProperty; public int MyProperty { get { return _myProperty; } set { _myProperty = value; } } - What is the purpose of the StringBuilder class in C#?
Answer: The StringBuilder class is used for efficient string manipulation, especially when you need to make multiple changes to a string. It is more memory-efficient than concatenating strings. - What is the C# lock statement used for?
Answer: The lock statement is used to synchronize access to a shared resource by allowing only one thread to execute a block of code at a time. It prevents data corruption due to concurrent access. - How do you implement method overloading in C#?
Answer: Method overloading is achieved by defining multiple methods with the same name but different parameter lists in the same class. - Explain the concept of a property accessor in C#.
Answer: Property accessors are the get and set methods associated with a property. The get accessor is used to retrieve the property value, and the set accessor is used to set the property value. - What is the purpose of the as and is operators in C#?
Answer: The as operator is used for safe type casting, and it returns null if the cast fails. The is operator is used to check whether an object is of a particular type and returns a boolean value. - Explain the difference between IEnumerable and IEnumerator in C#.
Answer: IEnumerable represents a collection of objects that can be enumerated, while IEnumerator provides a way to iterate over the collection using methods like MoveNext() and Current. - What is a lambda expression in C#?
Answer: A lambda expression is an anonymous function that can have parameters and a body. It’s often used for defining delegates or inline functions. - What are extension methods in C#?
Answer: Extension methods allow you to add new methods to existing types without modifying their source code. They are defined as static methods in static classes and are commonly used for extending .NET framework classes. - Explain the concept of boxing and unboxing in C#.
Answer: Boxing is the process of converting a value type to a reference type, and unboxing is the reverse process, converting a boxed value back to its original value type. It can lead to performance overhead. - What are delegates and events in C#?
Answer: Delegates are reference types that hold references to methods. Events are a higher-level concept that uses delegates to allow objects to send notifications to other objects when specific actions occur. - How do you implement a custom exception class in C#?
Answer: You can create a custom exception class by inheriting from the Exception class or any other exception type. You should provide constructors and possibly additional properties for your custom exception. - What is the difference between readonly and const in C#?
Answer: readonly fields can be assigned a value at runtime but only once, while const fields are assigned a value at compile-time and cannot be changed. const fields are implicitly static. - How does C# support multiple inheritance?
Answer: C# supports multiple inheritance through interface implementation. A class can implement multiple interfaces to achieve functionality similar to multiple inheritance. - What is a virtual method in C#?
Answer: A virtual method is a method in a base class that can be overridden by derived classes using the override keyword. It allows polymorphic behavior, enabling the appropriate method to be called at runtime. - What is the purpose of the using directive in C#?
Answer: The using directive is used to include a namespace in your program, allowing you to use types from that namespace without specifying the full namespace path. - Explain the purpose of the yield keyword in C#.
Answer: The yield keyword is used to create an iterator in a method, allowing it to be used in a foreach loop. It can make working with sequences more efficient and readable. - What is a partial class in C#?
Answer: A partial class is a class that can be divided into multiple source files. This is often used to separate code generated by tools from user-written code. - What is reflection in C#?
Answer: Reflection is a feature in C# that allows you to inspect and interact with the metadata of types and assemblies at runtime. It’s commonly used for tasks like creating instances, invoking methods, and accessing attributes. - Explain the concept of an extension method in C#.
Answer: An extension method is a static method that can be called as if it were an instance method on an object. It’s used to extend the functionality of existing types without modifying their source code. - What are nullable types in C#?
Answer: Nullable types allow value types (e.g., int, float) to have a value of null. They are represented using the ? modifier, like int?. - What is the purpose of the Auto-implemented properties in C#?
Answer: Auto-implemented properties allow you to create a property without explicitly defining a private field. The compiler generates a private field for you. - How does the as operator differ from a cast in C#?
Answer: The as operator is used for safe type casting and returns null if the cast fails, while a regular cast can throw an InvalidCastException if the cast is not valid. - What is a finalizer in C#?
Answer: A finalizer, defined with the ~ symbol, is a method used for cleaning up resources when an object is garbage collected. It’s called automatically by the garbage collector. - What is an anonymous type in C#?
Answer: An anonymous type is a type that doesn’t have a defined name. It’s often used when you need to create a simple class on the fly to store a set of values temporarily. - What is Dependency Injection (DI) in C#?
Answer: Dependency Injection is a design pattern in C# where dependencies are provided from the outside rather than being created within a class. It promotes loose coupling and testability. - What is the difference between ref and out parameters in C#?
Answer: ref parameters require the variable to be initialized before passing it to a method, while out parameters do not require initialization but must be assigned a value within the method. - Explain the purpose of the params keyword in C#.
Answer: The params keyword allows a method to accept a variable number of arguments of the same data type as a parameter. It simplifies method calls with multiple arguments. - What is the difference between IEnumerable and IQueryable in LINQ?
Answer: IEnumerable performs in-memory querying and is suitable for LINQ to Objects, while IQueryable performs database querying and is suitable for LINQ to SQL or Entity Framework. - How does garbage collection work in C#?
Answer: Garbage collection automatically reclaims memory by identifying and cleaning up objects that are no longer referenced. It uses a generational approach. - What is the async and await pattern in C#? How does it work?
Answer: async and await are used for asynchronous programming. async marks a method as asynchronous, and await is used to await the completion of asynchronous tasks, allowing non-blocking execution. - Explain the concept of delegates in C#.
Answer: Delegates are type-safe function pointers that can reference methods. They are often used for implementing event handling and callbacks. - What is the purpose of the using directive in C#?
Answer: The using directive is used to include namespaces in a C# file, making types and members in those namespaces accessible without fully qualifying them. - How does the try-catch-finally block work for exception handling in C#?
Answer: The try block contains code that may throw exceptions. If an exception occurs, control is transferred to the catch block. The finally block always executes, whether an exception occurs or not. - What is the difference between async and thread-based concurrency in C#?
Answer: async allows non-blocking, task-based concurrency, while thread-based concurrency uses separate threads for parallel execution. - What is the purpose of the volatile keyword in C#?
Answer: The volatile keyword indicates that a field may be modified by multiple threads, and its value should not be cached by the compiler. - Explain the concept of boxing and unboxing in C#.
Answer: Boxing is the process of converting a value type to a reference type, and unboxing is the reverse process. It’s necessary when dealing with value types in collections. - What is the C# null conditional operator (?.)?
Answer: The ?. operator is used to check for null before accessing a member of an object. It helps prevent null reference exceptions. - What is a lambda expression in C#?
Answer: A lambda expression is a concise way to represent an anonymous method with a specific set of parameters and a body. It is often used in LINQ and functional programming. - Explain the concept of events and event handlers in C#.
Answer: Events allow one object to notify other objects when a specific action occurs. Event handlers are methods that handle the event when it is raised. - What is a delegate multicast in C#?
Answer: A delegate can reference multiple methods, and invoking the delegate will call all the referenced methods. This is known as delegate multicast. - How do you implement custom exception handling in C#?
Answer: Custom exceptions are created by deriving from the Exception class. You can add properties and methods specific to your exception type. - Explain the purpose of the StringBuilder class in C#.
Answer: StringBuilder is a mutable, efficient way to build and manipulate strings. It’s used to avoid the performance overhead of string concatenation. - What is the difference between the == operator and the Equals() method for comparing objects in C#?
Answer: == compares object references, while Equals() compares object content. The behavior can be customized by overriding the Equals() method. - How can you ensure thread safety in a multi-threaded C# application?
Answer: Thread safety can be achieved using techniques like locks, mutexes, and the Monitor class, or by using thread-safe collections in the System.Collections.Concurrent namespace. - What are extension methods in C#?
Answer: Extension methods allow you to add methods to existing types without modifying the types themselves. They are defined as static methods in static classes. - Explain the purpose of the yield keyword in C#.
Answer: The yield keyword is used to create iterators. It simplifies the process of creating custom collection classes and lazy-loading data. - What is the difference between List and Dictionary collections in C#?
Answer: List is an ordered collection of elements, while Dictionary is a key-value pair collection. Keys in a Dictionary must be unique. - How do you implement an interface in C#?
Answer: To implement an interface, a class must provide concrete definitions for all the methods and properties defined in the interface. - What are the advantages of using dependency injection in C#?
Answer: Dependency injection promotes loose coupling between components, making code more maintainable, testable, and extensible. - Explain the differences between async/await and Task.Run() for parallel programming in C#.
Answer: async/await is used for non-blocking asynchronous operations, while Task.Run() is used for offloading synchronous work to a separate thread. - How does C# handle memory management and garbage collection?
Answer: C# uses automatic memory management, where objects are automatically reclaimed by the garbage collector when they are no longer referenced. - What is the purpose of the lock keyword in C#?
Answer: The lock keyword is used to create a mutually exclusive section of code to ensure that only one thread can access it at a time, preventing race conditions. - How do you implement a custom comparer for sorting objects in C#?
Answer: You can implement a custom comparer by creating a class that implements the IComparer<T> or IComparable<T> interface and defining the comparison logic. - What is the purpose of the Reflection namespace in C#?
Answer: The Reflection namespace is used to inspect and interact with the metadata of assemblies, types, and members at runtime. - Explain the difference between DataAnnotations and Fluent API in Entity Framework for data validation and modeling.
Answer: DataAnnotations use attributes to define validation rules on model properties, while Fluent API uses a fluent interface to configure entity and property behavior in a more programmatic way. - What is the purpose of the volatile keyword in C#?
Answer: The volatile keyword indicates that a field may be modified by multiple threads, and its value should not be cached by the compiler. - How does async/await work in C#? What are the benefits of using it?
Answer: async/await is used for asynchronous programming. It allows non-blocking execution, improving application responsiveness and scalability by avoiding thread blocking. - What are attributes in C#, and how are they used?
Answer: Attributes are metadata that can be added to program entities. They are used for various purposes like code generation, documentation, and specifying behaviors. - What is a finalizer in C#?
Answer: A finalizer (destructor) is a method in C# that is used to release unmanaged resources. It is called automatically by the garbage collector before the object is reclaimed. - What is a value type and a reference type in C#?
Answer: Value types store their data directly, and reference types store references to their data. Value types are usually primitive types, and reference types are objects and classes. - How do you implement a Singleton pattern in C#?
Answer: A Singleton pattern ensures that a class has only one instance. It is typically implemented by making the constructor private and providing a static method to access the single instance. - Explain the purpose of the async and await keywords in C#.
Answer: async marks a method as asynchronous, and await is used to pause the method’s execution until a task is complete, allowing other operations to proceed without blocking the thread. - What is an extension method in C#?
Answer: An extension method is a static method that can be added to existing classes without modifying the original code. It is used to extend the behavior of types. - How does the using statement work in C#?
Answer: The using statement is used to manage resources like file streams or database connections. It ensures that the resources are properly disposed of when they are no longer needed. - Explain the purpose of delegates and events in C#.
Answer: Delegates are type-safe function pointers used to reference methods. Events are a way to provide notifications when an action or event occurs.