Bird
Raised Fist0
C Sharp (C#)programming~5 mins

When to use abstract vs concrete in C Sharp (C#) - Quick Revision & Key Differences

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is an abstract class in C#?
An abstract class is a class that cannot be instantiated on its own and is meant to be a base class. It can contain abstract methods (without implementation) that derived classes must implement.
Click to reveal answer
beginner
What is a concrete class in C#?
A concrete class is a class that can be instantiated directly. It provides full implementations of its methods and can be used to create objects.
Click to reveal answer
intermediate
When should you use an abstract class instead of a concrete class?
Use an abstract class when you want to define a common base with shared code and require derived classes to implement specific methods. It helps enforce a contract and reuse code.
Click to reveal answer
beginner
Can you instantiate an abstract class directly?
No, you cannot create an instance of an abstract class directly. You must create an instance of a derived concrete class.
Click to reveal answer
intermediate
Give a real-life example of when to use an abstract class.
Imagine a base class 'Vehicle' that defines common features like 'StartEngine' but leaves the 'Drive' method abstract because cars and boats drive differently. Concrete classes like 'Car' and 'Boat' implement 'Drive'.
Click to reveal answer
Which statement about abstract classes in C# is true?
AYou cannot create an instance of an abstract class.
BAbstract classes must have no methods.
CAbstract classes can only have private methods.
DAbstract classes are the same as interfaces.
When should you use a concrete class?
AWhen you want to force derived classes to implement methods.
BWhen you want to create objects directly with full method implementations.
CWhen you want to prevent instantiation.
DWhen you want to define only method signatures.
What happens if a class inherits from an abstract class but does not implement its abstract methods?
AThe abstract methods are ignored.
BThe code compiles without errors.
CThe derived class becomes concrete automatically.
DThe derived class must also be declared abstract.
Which of these is NOT a reason to use an abstract class?
ATo share common code among related classes.
BTo enforce a contract for derived classes.
CTo create objects directly.
DTo define some methods without implementation.
If you want to define a method that must be implemented differently by each subclass, you should:
AMake the method abstract in an abstract class.
BImplement the method fully in a concrete class.
CMake the method private.
DUse a static method.
Explain the difference between abstract and concrete classes and when to use each.
Think about base classes and objects you can create.
You got /5 concepts.
    Describe a real-world scenario where an abstract class is useful.
    Consider something like vehicles or animals.
    You got /4 concepts.

      Practice

      (1/5)
      1. Which statement best describes when to use an abstract class in C#?
      easy
      A. When you want to define a common plan without providing full implementation.
      B. When you want to create a fully working class that can be instantiated.
      C. When you want to prevent inheritance altogether.
      D. When you want to create a class with only static methods.

      Solution

      1. Step 1: Understand abstract class purpose

        An abstract class defines methods or properties that must be implemented by subclasses but does not provide full implementation itself.
      2. Step 2: Compare with concrete class

        Concrete classes provide full working code and can be instantiated, unlike abstract classes.
      3. Final Answer:

        When you want to define a common plan without providing full implementation. -> Option A
      4. Quick Check:

        Abstract class = common plan without full code [OK]
      Hint: Abstract = plan only, Concrete = full working code [OK]
      Common Mistakes:
      • Confusing abstract with concrete classes
      • Thinking abstract classes can be instantiated
      • Believing abstract classes provide full method bodies
      2. Which of the following is the correct way to declare an abstract class in C#?
      easy
      A. class abstract Vehicle { }
      B. public abstract class Vehicle { }
      C. abstract public Vehicle { }
      D. public class abstract Vehicle { }

      Solution

      1. Step 1: Recall C# syntax for abstract classes

        The correct syntax places the keyword abstract before class and then the class name.
      2. Step 2: Check each option

        public abstract class Vehicle { } uses public abstract class Vehicle { }, which is correct. Other options have incorrect keyword order or missing keywords.
      3. Final Answer:

        public abstract class Vehicle { } -> Option B
      4. Quick Check:

        abstract class syntax = 'public abstract class' [OK]
      Hint: Use 'abstract' before 'class' keyword [OK]
      Common Mistakes:
      • Placing 'abstract' after 'class'
      • Omitting 'class' keyword
      • Incorrect keyword order
      3. What will be the output of this C# code?
      abstract class Animal {
          public abstract void Speak();
      }
      
      class Dog : Animal {
          public override void Speak() {
              Console.WriteLine("Woof");
          }
      }
      
      class Program {
          static void Main() {
              Animal a = new Dog();
              a.Speak();
          }
      }
      medium
      A. Runtime error because Speak is abstract
      B. Compile-time error because Animal is abstract
      C. Woof
      D. No output

      Solution

      1. Step 1: Understand abstract method implementation

        The abstract method Speak in Animal is overridden in Dog with a concrete implementation that prints "Woof".
      2. Step 2: Analyze runtime behavior

        Creating an Animal reference to a Dog object and calling Speak() calls the overridden method, printing "Woof".
      3. Final Answer:

        Woof -> Option C
      4. Quick Check:

        Abstract method overridden = prints 'Woof' [OK]
      Hint: Abstract method must be overridden to run [OK]
      Common Mistakes:
      • Thinking abstract class cannot be referenced
      • Expecting compile or runtime error
      • Assuming abstract methods have bodies
      4. Identify the error in this code snippet:
      abstract class Shape {
          public abstract double Area();
      }
      
      class Circle : Shape {
          public double Area() {
              return 3.14 * 5 * 5;
          }
      }
      medium
      A. Circle must declare Area() as override
      B. Shape cannot have abstract methods
      C. Circle cannot inherit from Shape
      D. Area method should return int, not double

      Solution

      1. Step 1: Check abstract method override rules

        When a class inherits an abstract method, it must override it using the override keyword.
      2. Step 2: Identify missing override keyword

        The Circle class defines Area() but misses override, causing a compile error.
      3. Final Answer:

        Circle must declare Area() as override -> Option A
      4. Quick Check:

        Override keyword required for abstract methods [OK]
      Hint: Override abstract methods with 'override' keyword [OK]
      Common Mistakes:
      • Omitting override keyword
      • Thinking abstract methods can be ignored
      • Confusing return types
      5. You want to design a system where all vehicles must have a method StartEngine(), but the way engines start differs by vehicle type. Which approach is best in C#?
      hard
      A. Create a static class Vehicle with static StartEngine() method.
      B. Create a concrete class Vehicle with a fully implemented StartEngine() method for all vehicles.
      C. Use an interface with a concrete StartEngine() method and inherit it in all vehicle classes.
      D. Create an abstract class Vehicle with abstract method StartEngine(), then implement it in subclasses.

      Solution

      1. Step 1: Analyze requirement for different implementations

        Since StartEngine() differs by vehicle type, it should be declared abstract to force subclasses to provide their own version.
      2. Step 2: Choose correct class design

        An abstract class Vehicle with an abstract StartEngine() method fits best, allowing subclasses to implement specific behavior.
      3. Final Answer:

        Create an abstract class Vehicle with abstract method StartEngine(), then implement it in subclasses. -> Option D
      4. Quick Check:

        Abstract class for common plan, concrete for specifics [OK]
      Hint: Abstract method for varying behavior, concrete class for details [OK]
      Common Mistakes:
      • Using concrete class with one method for all vehicles
      • Trying to put method body in interface (not allowed)
      • Using static class which can't be inherited