Calling Overridden Virtual Method from Base Class in C#
I had a serious brain freeze today. I forgot polymorphism 101. I couldn’t remember if a virtual method defined in a base class and called in the constructor of the base class would call the overriden virtual method in a derived class. Instead of ol’reliable (Google Search), I decided to do a quick test because doing beats searching as it kind of burns in a lesson learned for me. Hopefully, I won’t forget this one for awhile. Anyway, the answer is yes, it will call the override and here is a test if you are having a brain freeze too and want to prove it (this is implemented with MSTest).
namespace BrainFreeze
{
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class PolymorphismTest
{
[TestMethod]
public void BaseClassVirtualMethodWhenCalledFromBaseContructorShouldCallDerivedVirtualOverride()
{
string expected = "ImpCallVirtual";
Imp imp = new Imp();
string actual = imp.Result;
Assert.AreEqual(expected, actual);
}
public class Base
{
public Base()
{
CallVirtual();
}
public string Result { get; set; }
public virtual void CallVirtual()
{
this.Result = "BaseCallVirtual";
}
}
public class Imp : Base
{
public Imp()
: base()
{
}
public override void CallVirtual()
{
this.Result = "ImpCallVirtual";
}
}
}
}