You can define a simple class:
public class A
{
    public void B()
    {
        Console.WriteLine("B called");
        this.C();
    }
    public void C()
    {
        Console.WriteLine("C called");
    }
}
But what if you get A defined as:
public class A
{
    public void C()
    {
        Console.WriteLine("C called");
    }
}
And you want to add function B to it? You use extension methods to do it:
public class A
{
    public void C()
    {
        Console.WriteLine("C called");
    }
}
// the extensions class, can be any name, must be public
public class Extensions
{
    public static void B(    this                   A                 me)
 // ^ must be public static  ^ indicates extension  ^ type to extend  ^ name of variable instead of this
    {
        Console.WriteLine("B called");
        // instead of this, you use the name of variable you used in the parameters
        me.C();
    }
}
Now you can call A.B() as it was in the first example.