Top C# Interview Questions and Answers (2025)
Try Aihirely for
Smarter Interview Prep
 Experience real-time AI support tailored to your Resume.
Boost your confidence and ace every question with
AI Mock Interview.
Question: What does the this keyword refer to in C#?
Answer:
In C#, the this keyword is a reference to the current instance of the class or struct in which it is used. It is used to access the members (fields, properties, methods) of the current object from within its instance methods or constructors. It provides a way to refer to the current object explicitly, which can be useful to disambiguate between class members and method parameters, or to pass the current object as an argument.
Here’s a breakdown of how this is used in C#:
1. Referring to the Current Instance:
- The 
thiskeyword refers to the instance of the class from which the method or property is being called. When you usethis, you are explicitly referring to the current object that is executing the code. 
Example:
public class Car
{
    private string model;
    public void SetModel(string model)
    {
        // Use `this` to differentiate between the parameter and the class field
        this.model = model;
    }
    public void DisplayModel()
    {
        Console.WriteLine("Car model: " + this.model);
    }
}
In the example above:
- The parameter 
modelinSetModelshadows the class membermodel. this.modelrefers to the class field, whilemodel(withoutthis) refers to the method parameter.
2. Constructor Chaining:
- In a constructor, 
thiscan be used to call another constructor of the same class. This is called constructor chaining. - It helps avoid redundancy by allowing one constructor to call another with different parameter combinations.
 
Example:
public class Car
{
    private string model;
    private string color;
    public Car(string model)
    {
        this.model = model;
    }
    public Car(string model, string color) : this(model)
    {
        this.color = color;
    }
}
Here, the constructor Car(string model, string color) calls the Car(string model) constructor using this(model).
3. Passing the Current Object:
- The 
thiskeyword can also be used to pass the current object as an argument to other methods or functions. 
Example:
public class Car
{
    public void ShowDetails()
    {
        Console.WriteLine("This is a car.");
    }
    public void DisplayDetails(Car car)
    {
        car.ShowDetails(); // Calling method of the passed object
    }
    public void InvokeDetails()
    {
        // Passing the current object to another method
        DisplayDetails(this);
    }
}
In the above example:
InvokeDetailsusesthisto pass the current instance of theCarobject to theDisplayDetailsmethod.
4. Accessing Properties and Fields:
- While it’s usually optional to use 
thisto access properties and fields (since C# assumes that you are referring to the instance by default), you can explicitly usethisto make the code more readable, especially when there is ambiguity. 
Example:
public class Car
{
    public string Model { get; set; }
    public int Year { get; set; }
    public void DisplayDetails()
    {
        // Using `this` to explicitly reference the instance
        Console.WriteLine($"Model: {this.Model}, Year: {this.Year}");
    }
}
5. In Static Methods:
- The 
thiskeyword is not available in static methods because static methods do not belong to an instance of the class, but to the class itself.thiscan only be used in instance methods or constructors. 
Example:
public class Car
{
    public static void DisplayCarInfo()
    {
        // Cannot use `this` in a static method
        // this.Model = "Tesla"; // Compile-time error
    }
}
Summary:
The this keyword in C#:
- Refers to the current instance of the class or struct.
 - Helps disambiguate between instance members and method parameters when they have the same name.
 - Can be used for constructor chaining to call one constructor from another.
 - Allows passing the current object to other methods or functions.
 - Is not available in static methods because static methods do not operate on instance data.
 
By using this, you can refer to the current instance of the class and work with its members more explicitly, improving code clarity and flexibility.
Question: What are value types and reference types in C#?
Answer:
In C#, value types and reference types are two fundamental categories that determine how data is stored, accessed, and manipulated in memory. Understanding the difference between them is key to mastering C# and working efficiently with data.
1. Value Types:
Value types hold data directly. When a value type is assigned to a new variable, the value is copied to the new variable. This means that each variable has its own copy of the data, and changes to one variable do not affect the other.
Characteristics of Value Types:
- Stored on the stack (in most cases).
 - When you assign one value type variable to another, a copy of the data is made.
 - Value types are typically primitive types (such as 
int,float,bool) and structs. - Do not support inheritance (except for implementing interfaces).
 
Examples of Value Types:
int x = 10;
int y = x;  // y gets a copy of the value of x, so they are independent.
y = 20;     // Modifying y does not affect x.
Console.WriteLine(x);  // Outputs 10
Console.WriteLine(y);  // Outputs 20
struct Point
{
    public int X;
    public int Y;
}
Point p1 = new Point { X = 5, Y = 10 };
Point p2 = p1;  // p2 gets a copy of p1, so p2.X is 5, and p2.Y is 10
p2.X = 20;      // Changing p2 does not affect p1.
Console.WriteLine(p1.X);  // Outputs 5
Console.WriteLine(p2.X);  // Outputs 20
Common Value Types:
- Primitive types: 
int,float,double,char,bool, etc. - Structs: Custom types defined with the 
structkeyword, such asDateTime,Guid, etc. - Enumerations: 
enumtypes. 
2. Reference Types:
Reference types hold a reference to the memory location where the actual data is stored, not the data itself. When a reference type is assigned to another variable, both variables refer to the same memory location. Changes made through one variable are reflected in the other, as both variables point to the same data.
Characteristics of Reference Types:
- Stored on the heap.
 - When you assign a reference type variable to another, both variables refer to the same object in memory (shallow copy).
 - Reference types can be inherited and are typically classes, arrays, delegates, and string.
 - They support null values, unlike value types (which always hold a value).
 
Examples of Reference Types:
class Person
{
    public string Name;
}
Person p1 = new Person { Name = "Alice" };
Person p2 = p1;  // p2 refers to the same object as p1.
p2.Name = "Bob";  // Changing p2 also changes p1 because they point to the same object.
Console.WriteLine(p1.Name);  // Outputs "Bob"
Console.WriteLine(p2.Name);  // Outputs "Bob"
int[] arr1 = new int[] { 1, 2, 3 };
int[] arr2 = arr1;  // arr2 references the same array as arr1.
arr2[0] = 10;       // Changing arr2 also changes arr1, because both reference the same array.
Console.WriteLine(arr1[0]);  // Outputs 10
Console.WriteLine(arr2[0]);  // Outputs 10
Common Reference Types:
- Classes: User-defined types created with the 
classkeyword. - Arrays: Arrays in C# are reference types, even if they contain value types.
 - Strings: Strings are reference types, though they behave like value types due to immutability.
 - Delegates: Objects representing method references.
 
3. Key Differences Between Value Types and Reference Types:
| Aspect | Value Types | Reference Types | 
|---|---|---|
| Memory Allocation | Stored on the stack | Stored on the heap | 
| Data | Holds the actual data | Holds a reference to the data (memory address) | 
| Assignment | A copy of the data is made when assigned | Both variables refer to the same object (shallow copy) | 
| Nullability | Cannot be null (except nullable types) | Can be null | 
| Inheritance | Does not support inheritance | Supports inheritance | 
| Default Value | Has a default value (e.g., 0 for int) | Default is null | 
4. Boxing and Unboxing (Value Types and Reference Types Interaction):
- Boxing: The process of converting a value type (like 
int) to a reference type (likeobject). - Unboxing: The reverse process, where a reference type is converted back to a value type.
 
Example:
int num = 42;
object obj = num;  // Boxing: num (value type) is boxed into obj (reference type)
int num2 = (int)obj;  // Unboxing: obj is unboxed back to the value type
Summary:
- Value Types: Store the actual data and are usually stored on the stack. They are copied when assigned and cannot be 
null. - Reference Types: Store a reference to the data (memory address) and are typically stored on the heap. They are shared when assigned and can be 
null. 
Understanding the difference between value types and reference types helps in managing memory efficiently and understanding how data is passed around in your program.
Read More
If you can’t get enough from this article, Aihirely has plenty more related information, such as C# interview questions, C# interview experiences, and details about various C# job positions. Click here to check it out.
