 <p>You only need virtual functions if you've set up an inheritance chain, and you want to override the default implementation of a function defined in the base class in a derived class.</p> <p>The classic example is something as follows:</p> <pre><code>public class Animal { public virtual void Speak() { Console.WriteLine("..."); } } public class Dog : Animal { public override void Speak() { Console.WriteLine("Bow-wow"); } } public class Human : Animal { public override void Speak() { Console.WriteLine("Hello, how are you?"); } } </code></pre> <p>Both the <code>Dog</code> and <code>Human</code> classes inherit from the base <code>Animal</code> class, because they're both types of animals. But they both speak in very different ways, so they need to override the <code>Speak</code> function to provide their own unique implementation.</p> <p>In certain circumstances, it can be beneficial to use the same pattern when designing your own classes because this enables <a href="http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29" rel="nofollow">polymorphism</a>, which is essentially where different classes share a common interface and can be handled similarly by your code.</p> <p>But I'll echo what others have suggested in the comments: learning object-oriented programming properly is not something you're going to be able to do by asking a few Stack Overflow questions. It's a complicated topic, and one well-worth investing your time as a developer learning. I highly advise picking up a book on object-oriented programming (and in particular, one written for the C# language) and going through the examples. OOP is a very powerful tool when used correctly, but can definitely become a hindrance when designed poorly!</p>