You need to mark it override. If you mark it virtualin HttpConnection, it will hide the base class implementation, and not override it. As a result, it could not be used polymorphically. Mark one method virtual, the rest should simply be redefined.
As a simple example
class A
{
public virtual void Frob()
{
Console.WriteLine("A");
}
}
class B : A
{
public virtual void Frob()
{
Console.WriteLine("B");
}
}
class C : B
{
public override void Frob()
{
Console.WriteLine("C");
}
}
B Frob, . . C A - "".
A obj = new C();
obj.Frob(); // "A" is written to the screen, not "C"
, , "A", , . , , . , ! , / . virtual override B, , , .