DEV Community

Cover image for Virtual in C#: How to Use it?
ByteHide
ByteHide

Posted on • Originally published at bytehide.com

Virtual in C#: How to Use it?

Ah, the noble ‘virtual’ keyword in C#. A handy element in a developer’s toolbox when it comes to advanced programming. By the end of this read, you’ll have a deeper understanding of C# virtual and might even find yourself falling in love with its elegant functionalities. It’s like having a Swiss Army knife in the middle of a dense jungle of coding problems.

Understanding the Concept of C# Virtual

Have you ever played one of those video games where a character can transform into different forms, each possessing its own unique abilities? The concept of C# Virtual is not too dissimilar. Let’s take a crack at understanding this chameleon of a keyword.

What is a Virtual Method in C#?

In C#, a virtual method is essentially like a base class method that can morph its behavior when inherited by a derived class. It’s sort of like a chameleon, which changes its color based on its surroundings. The key here? It uses the ‘virtual’ keyword.

public virtual void MyMethod()
{
    Console.WriteLine("Hello from Base Class");
}
Enter fullscreen mode Exit fullscreen mode

This innocent-looking piece of code declares a simple virtual method. In this case, a base class that says “Hello from Base Class”. But remember, due to its ‘virtual’ attribute, it’s ready for some magic transformations in any derived class.

The Virtual Keyword in C#

The ‘virtual’ keyword in C# lights up the green signal for a method, property or indexer to be overridden in a derived class. It’s like playing catch – the base class ‘throws’ the ‘virtual’ method, and the derived class ‘catches’ it to create an overridden form.

public class BaseClass
{
    public virtual void MyMethod()
    {
        Console.WriteLine("Hello from Base Class");
    }
}
public class DerivedClass : BaseClass
{
    public override void MyMethod()
    {
        Console.WriteLine("Hello from Derived Class");
    }
}
Enter fullscreen mode Exit fullscreen mode

In this quick code snippet, you can see the virtual method ‘MyMethod’ being set free from the ‘BaseClass’ only to be caught and customized in the ‘DerivedClass’. It’s beautiful, right?

Virtual vs Abstract in C#

It’s like a battle royale scene – Virtual vs Abstract! But it’s hardly a fight. Think of it as two sides of the same coin. They’re used in tandem for creating elegant polymorphism in C#. Let’s figure out the key differences and learn how they dance together.

Understanding Abstract Methods in C#

In C#, an abstract method is a lot like that exclusive item you’ll only find in a high-tier loot box in a game. Why? Because these methods only exist in an abstract class and cannot contain any actual code. An abstract class is that high-tier loot box. It’s your golden ticket to advanced level polymorphism!

public abstract class AbstractBaseClass
{
    public abstract void AbstractMethod();
}
public class DerivedClass : AbstractBaseClass
{
    public override void AbstractMethod()
    {
        Console.WriteLine("Hello from Derived Class");
    }
}
Enter fullscreen mode Exit fullscreen mode

As we can see from the example above, the ‘AbstractMethod’ is declared in the ‘AbstractBaseClass’ and overridden in the ‘DerivedClass’. It’s quite like that shiny new equipment waiting to be equipped by your game character.

Exploring Virtual Functions in C#

In the digital jungle of code, ‘virtual functions’ are the chameleons adapting themselves dynamically based on their environment. In the context of C#, a ‘virtual function’ is a type of function equipped with the virtual keyword, allowing the flexibility of overriding in derived classes. Let’s take a deeper dive to understand its significance and usage.

Virtual Function Syntax and Usage

In C# universe, functions and methods are often used interchangeably. The term ‘virtual function’ is frequently used in the context of languages like C++, but it carries the same essence in C#. A ‘virtual function’ in C# is essentially a ‘virtual method’. See how ‘virtual’ injects versatility in our code:

public class Vehicle
{
    public virtual void Drive()
    {
        Console.WriteLine("Driving a vehicle");
    }
}

public class Car : Vehicle
{
    public override void Drive()
    {
        Console.WriteLine("Driving a car");
    }
}
Enter fullscreen mode Exit fullscreen mode

In the above code example, Vehicle is a base class with a Drive method defined as virtual. Now, the Car class, which derives from Vehicle, overrides the Drive method. Therefore, when we call the Drive method on an object of type Car, the overridden version of the method in the derived class is executed.

Vehicle myVehicle = new Car();
myVehicle.Drive();  // Outputs: Driving a car
Enter fullscreen mode Exit fullscreen mode

This simple demonstration provides a glimpse of the power of virtual functions. It’s just like selecting brushes while painting—you can modify and customize according to your vision. The virtual function serves as the base brush and derived classes can override to exhibit varying styles.

Deep-dive into C# Virtual Property

Properties, the crown jewels of a class, can also employ the ‘virtual’ keyword. This allows derived properties to redefine their behaviors, promoting flexibility and control.

In C#, properties aren’t confined to the basic getters and setters. Through virtual properties, we can morph and extend their behaviour:

public class Employee
{
    public virtual string Description
    {
        get { return "Employee"; }
    }
}

public class Manager : Employee
{
    public override string Description
    {
        get { return "Manager"; }
    }
}
Enter fullscreen mode Exit fullscreen mode

Here, the Description property in the base Employee class is declared using the virtual keyword. The derived Manager class then overrides the Description property. It completely alters my perception of properties, isn’t it captivating to see them evolve?

Employee testEmployee = new Manager();
Console.WriteLine(testEmployee.Description);  // Outputs: Manager
Enter fullscreen mode Exit fullscreen mode

Upon executing the above code, the output will be “Manager” as the call to the Description property corresponds to the overridden version in the Manager class.

Choosing to Use C# Virtual: When and Why

The ‘virtual’ keyword in C# is a megaphone, silently shouting ‘override me if you need’. It’s an invitation to derived classes to modify behavior according to their needs. But just as a superhero must decide when to use their power, as coders, we must rightfully judge when to resort to ‘virtual’.

Here are a few reasons to use ‘virtual’:

  • Tailoring methods for specific derived classes: Virtual methods enable derived classes to customize behavior inherited from base classes as per their requirements.
  • Anticipating modifications: If you’re foreseeing that particular methods in derived classes might need to deviate from the base class’s implementation, then declaring that method ‘virtual’ in the base class is a proactive approach.
  • Implementing ‘template method’ design patterns: The ‘virtual’ keyword is significant in implementing this pattern, which promotes defining the skeleton of an algorithm in a method and deferring some steps to subclasses.

Conclusion: Leveraging C# Virtual in Your Programming

The proof of the pudding is in the eating. Now that you know about C#’s ‘virtual’ keyword, employing it in your projects is the ultimate test. Practice makes perfect, and who knows, your consistent use of ‘virtual’ might make you the C# superhero in your team.

Here’s a final piece of advice: To make the most out of ‘C# virtual’, always base your choice on the software’s requirements and the need for extensibility. Remember, with great power comes great responsibility! Ready to immerse yourself in the world of C# virtual? The time is now. Happy coding!

Top comments (4)

Collapse
 
timoxa_dev profile image
timoxa.dev

Спасибо

Collapse
 
bytehide profile image
ByteHide

Thanks!! @timoxa_dev

Collapse
 
mybarghouthi profile image
Ahmad

Thanks for sharing

Collapse
 
bytehide profile image
ByteHide

Thanks @mybarghouthi !