Master technical and career interviews with structured answers—short definition, real examples, pitfalls, and how to answer in 60–90 seconds.
Short answer: Properties provide controlled access to private fields. Enable validation, read-only/write-only access, and future flexibility. Example: private int score; Example code public int Score { get { return score…
Short answer: Encapsulation → Hides internal data, focuses on data protection. Abstraction → Hides implementation details, focuses on simplifying complex systems. Real-world example (ShopNest) ShopNest’s Order keeps _ite…
Short answer: Real-World Example: Bank Account Management public class BankAccount Example code { private string accountNumber; // private field private decimal balance; // private field public string AccountNumber { get…
Short answer: Abstraction is the process of hiding the internal implementation details of a system and exposing only the essential features. It allows developers to focus on what an object does, not how it does it. Examp…
Short answer: Simplifies complex systems by exposing only relevant functionality. Enhances maintainability, readability, and reusability of code. Reduces dependency on implementation details, making systems more flexible…
Short answer: Using abstract classes or interfaces. Abstract classes can have abstract and non-abstract methods. Interfaces define method signatures only. abstract class Vehicle { public abstract void Start(); } interfac…
Short answer: Classes that cannot be instantiated directly and may contain abstract methods (without implementation). Can have fields, constructors, and concrete methods. abstract class Animal { public abstract void Make…
Short answer: Interfaces define a contract of methods, properties, or events that implementing classes must follow. Interfaces provide full abstraction without any implementation (C# 8+ allows default methods). interface…
Short answer: By exposing method signatures only, interfaces hide the implementation. Allows multiple classes to implement the interface differently, providing flexibility and decoupling. class Bird : IFlyable Example co…
Short answer: Feature Abstract Class Interface Methods Can have abstract + concrete methods Only abstract methods (C# 8+ allows default implementation) Fields Can have fields Cannot have fields Inheritance Single inherit…
Short answer: No, abstract classes cannot be instantiated directly. Must be inherited by a derived class which implements abstract methods. abstract class Shape { public abstract void Draw(); } // Shape s = new Shape();…
Short answer: Yes, abstract classes can have constructors. Used to initialize fields for derived classes. abstract class Vehicle { Example code public string Brand; public Vehicle(string brand) { Brand = brand; } } class…
Short answer: Yes, abstract classes can have concrete methods with implementation. Allows shared behavior for derived classes. abstract class Animal { Example code public void Sleep() => Console.WriteLine("Sleepi…
Short answer: Reduces system complexity by focusing on essential features. Decouples modules, making large systems easier to maintain and extend. Promotes code reuse and flexibility. Real-world example (ShopNest) Checkou…
Short answer: Hides implementation details, exposing only what is necessary. Users interact with interfaces or abstract methods, not the full system logic. Simplifies testing, maintenance, and understanding of code. Real…
Short answer: Real-World Example: Payment Processing // Abstract class abstract class Payment { public override void Pay(decimal amount) => Console.WriteLine($"Paid {amount:C} using PayPal"); } // Usage Paym…
Short answer: Base Class (Parent) → Class whose members are inherited. Derived Class (Child) → Class that inherits from base class. class Vehicle { public void Start() {} } // Base Example code class Car : Vehicle {} //…
Short answer: Using the colon (:) symbol. Derived class can access public/protected members of the base class. class Vehicle { public void Start() => Console.WriteLine("Start"); } Example code class Car : Ve…
Short answer: No, C# does not support multiple class inheritance to avoid ambiguity. Real-world example (ShopNest) ShopNest has a base PaymentMethod with virtual decimal Fee() . UpiPayment and CardPayment override the fe…
Short answer: Use interfaces to achieve multiple inheritance. A class can implement multiple interfaces. interface IFlyable { void Fly(); } interface IDriveable { void Drive(); } class FlyingCar : IFlyable, IDriveable {…
Short answer: Feature Inheritance Composition Relationship "is-a" "has-a" Reuse Derived class reuses base class Object contains other objects Flexibility Less flexible More flexible Example: Inheritan…
Short answer: A derived class provides a new implementation of a base class method marked virtual. Achieves run-time polymorphism. class Vehicle { public virtual void Start() => Console.WriteLine("Vehicle starts&…
Short answer: virtual → Marks a base class method as overridable. override → Overrides a virtual method in the derived class. Real-world example (ShopNest) ShopNest has a base PaymentMethod with virtual decimal Fee() . U…
Short answer: Prevents a class from being inherited or a method from being overridden. sealed class FinalClass { } class Car : FinalClass { } // Not allowed Real-world example (ShopNest) Think of ShopNest’s Product , Car…
Short answer: override → Overrides a virtual method in base class (runtime polymorphism). new → Hides a base class method (compile-time hiding, not true overriding). class Vehicle { public void Start() => Console.Writ…
C# OOP C# Programming Tutorial · OOP
Short answer: Properties provide controlled access to private fields. Enable validation, read-only/write-only access, and future flexibility. Example: private int score;
public int Score
{ get { return score; } set { if (value >= 0) score = value; } // validation
}
ShopNest’s Order keeps _items private and exposes AddItem() so totals stay correct—callers cannot put a negative quantity directly into the list.
C# OOP C# Programming Tutorial · OOP
Short answer: Encapsulation → Hides internal data, focuses on data protection. Abstraction → Hides implementation details, focuses on simplifying complex systems.
ShopNest’s Order keeps _items private and exposes AddItem() so totals stay correct—callers cannot put a negative quantity directly into the list.
C# OOP C# Programming Tutorial · OOP
Short answer: Real-World Example: Bank Account Management public class BankAccount
{
private string accountNumber; // private field
private decimal balance; // private field
public string AccountNumber { get { return accountNumber; } } // read-only public decimal Balance { get { return balance; } } // read-only public BankAccount(string accNum, decimal initialBalance)
{
accountNumber = accNum; balance = initialBalance >= 0 ? initialBalance : throw new ArgumentException("Invalid balance"); }
public void Deposit(decimal amount)
{
if(amount > 0) balance += amount; else throw new ArgumentException("Deposit must be positive"); }
public void Withdraw(decimal amount)
{
if(amount > 0 && amount <= balance) balance -= amount; else throw new InvalidOperationException("Insufficient balance"); }
} // Usage BankAccount myAccount = new BankAccount("ACC123", 1000); myAccount.Deposit(500); // Balance becomes 1500 myAccount.Withdraw(200); // Balance becomes 1300 Console.WriteLine($"Account: {myAccount.AccountNumber}, Balance: {myAccount.Balance}"); Explanation: accountNumber and balance are private, protecting sensitive data. Controlled access via methods ensures data integrity. Demonstrates real-world encapsulation in action.
C# OOP C# Programming Tutorial · OOP
Short answer: Abstraction is the process of hiding the internal implementation details of a system and exposing only the essential features. It allows developers to focus on what an object does, not how it does it.
A Vehicle class exposes Start() method without revealing engine details.
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Simplifies complex systems by exposing only relevant functionality. Enhances maintainability, readability, and reusability of code. Reduces dependency on implementation details, making systems more flexible.
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Using abstract classes or interfaces. Abstract classes can have abstract and non-abstract methods. Interfaces define method signatures only. abstract class Vehicle { public abstract void Start(); } interface IDriveable { void Drive(); }
Using abstract classes or interfaces. Abstract classes can have abstract and non-abstract methods. Interfaces define method signatures only. abstract class Vehicle {
public abstract void Start();
}
interface IDriveable
{ void Drive(); }
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Classes that cannot be instantiated directly and may contain abstract methods (without implementation). Can have fields, constructors, and concrete methods. abstract class Animal { public abstract void MakeSound(); public void Sleep() => Console.WriteLine("Sleeping"); }
Classes that cannot be instantiated directly and may contain abstract methods (without implementation). Can have fields, constructors, and concrete methods. abstract class Animal {
public abstract void MakeSound();
public void Sleep() => Console.WriteLine("Sleeping");
}
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Interfaces define a contract of methods, properties, or events that implementing classes must follow. Interfaces provide full abstraction without any implementation (C# 8+ allows default methods). interface IFlyable
{ void Fly(); }
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: By exposing method signatures only, interfaces hide the implementation. Allows multiple classes to implement the interface differently, providing flexibility and decoupling. class Bird : IFlyable
{
public void Fly() => Console.WriteLine("Bird is flying");
}
class Airplane : IFlyable
{
public void Fly() => Console.WriteLine("Airplane is flying");
}
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Feature Abstract Class Interface Methods Can have abstract + concrete methods Only abstract methods (C# 8+ allows default implementation) Fields Can have fields Cannot have fields Inheritance Single inheritance Multiple interfaces can be implemented Constructo Can have constructors Cannot have constructors
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.
C# OOP C# Programming Tutorial · OOP
Short answer: No, abstract classes cannot be instantiated directly. Must be inherited by a derived class which implements abstract methods. abstract class Shape { public abstract void Draw(); } // Shape s = new Shape(); // Not allowed
class Circle : Shape { public override void Draw() => Console.WriteLine("Circle"); }
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Yes, abstract classes can have constructors. Used to initialize fields for derived classes. abstract class Vehicle {
public string Brand;
public Vehicle(string brand) { Brand = brand; }
}
class Car : Vehicle
{
public Car(string brand) : base(brand) { }
}
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Yes, abstract classes can have concrete methods with implementation. Allows shared behavior for derived classes. abstract class Animal {
public void Sleep() => Console.WriteLine("Sleeping");
public abstract void MakeSound();
}
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Reduces system complexity by focusing on essential features. Decouples modules, making large systems easier to maintain and extend. Promotes code reuse and flexibility.
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Hides implementation details, exposing only what is necessary. Users interact with interfaces or abstract methods, not the full system logic. Simplifies testing, maintenance, and understanding of code.
Checkout calls IPaymentGateway.Charge(). Razorpay and Stripe adapters implement the same interface, so ShopNest can switch gateways without rewriting the order service.
C# OOP C# Programming Tutorial · OOP
Short answer: Real-World Example: Payment Processing // Abstract class abstract class Payment { public override void Pay(decimal amount) => Console.WriteLine($"Paid {amount:C} using PayPal"); } // Usage Payment payment1 = new CreditCardPayment(); payment1.Pay(500); payment1.ShowReceipt(500); Payment payment2 = new PayPalPayment(); payment2.Pay(300); payment2.ShowReceipt(300); Explanation: Payment defines what a payment should do…
(abstract method Pay). Derived classes (CreditCardPayment, PayPalPayment) define how payment is made. Users interact only with the abstract interface, not the internal logic.
public abstract void Pay(decimal amount);
public void ShowReceipt(decimal amount) => Console.WriteLine($"Paid: {amount:C}"); } // Derived classes implement abstraction class CreditCardPayment : Payment
{
public override void Pay(decimal amount) => Console.WriteLine($"Paid {amount:C} using Credit Card"); }
class PayPalPayment : Payment
{
C# OOP C# Programming Tutorial · OOP
Short answer: Base Class (Parent) → Class whose members are inherited. Derived Class (Child) → Class that inherits from base class. class Vehicle { public void Start() {} } // Base
class Car : Vehicle {} // Derived
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.
C# OOP C# Programming Tutorial · OOP
Short answer: Using the colon (:) symbol. Derived class can access public/protected members of the base class. class Vehicle { public void Start() => Console.WriteLine("Start"); }
class Car : Vehicle { }
Car myCar = new Car(); myCar.Start(); // Inherited method
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.
C# OOP C# Programming Tutorial · OOP
Short answer: No, C# does not support multiple class inheritance to avoid ambiguity.
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.
C# OOP C# Programming Tutorial · OOP
Short answer: Use interfaces to achieve multiple inheritance. A class can implement multiple interfaces. interface IFlyable { void Fly(); } interface IDriveable { void Drive(); } class FlyingCar : IFlyable, IDriveable { public void Fly() {} public void Drive() {} }
Use interfaces to achieve multiple inheritance. A class can implement multiple interfaces. interface IFlyable { void Fly(); }
interface IDriveable { void Drive(); }
class FlyingCar : IFlyable, IDriveable { public void Fly() {} public void Drive() {} }
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.
C# OOP C# Programming Tutorial · OOP
Short answer: Feature Inheritance Composition Relationship "is-a" "has-a" Reuse Derived class reuses base class Object contains other objects Flexibility Less flexible More flexible Example: Inheritance → Car is a Vehicle Composition → Car has a Engine
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.
C# OOP C# Programming Tutorial · OOP
Short answer: A derived class provides a new implementation of a base class method marked virtual. Achieves run-time polymorphism. class Vehicle { public virtual void Start() => Console.WriteLine("Vehicle starts"); } class Car : Vehicle { public override void Start() => Console.WriteLine("Car starts"); }
Think of ShopNest’s Product, Cart, and Order classes: each object holds data + behavior, so pricing rules stay next to the data they use.
C# OOP C# Programming Tutorial · OOP
Short answer: virtual → Marks a base class method as overridable. override → Overrides a virtual method in the derived class.
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.
C# OOP C# Programming Tutorial · OOP
Short answer: Prevents a class from being inherited or a method from being overridden. sealed class FinalClass { } class Car : FinalClass { } // Not allowed
Think of ShopNest’s Product, Cart, and Order classes: each object holds data + behavior, so pricing rules stay next to the data they use.
C# OOP C# Programming Tutorial · OOP
Short answer: override → Overrides a virtual method in base class (runtime polymorphism). new → Hides a base class method (compile-time hiding, not true overriding). class Vehicle { public void Start() => Console.WriteLine("Vehicle");
}
class Car : Vehicle { public new void Start() => Console.WriteLine("Car"); }
ShopNest has a base PaymentMethod with virtual decimal Fee(). UpiPayment and CardPayment override the fee logic without changing the checkout caller.