I'd assume that they're referring to the fact that C#'s compiler will choose the method that most narrowly defines the type. So for example if you have a abstract class (ABS) and a inherited class (CLS2) and 2 extension methods
public static object GetStuff(this ABS obj){
blah blah blah
}
public static object GetStuff(this CLS obj){
blah blah blah
}
if you call the CLS2.GetStuff() the compiler will choose the second method. Once you know that you can take "Override" an extension method by making it more specific. So if you have a generic class
public class Foo<T>{}
You could make 2 extension methods (using classes from above as types)
public static void DoSomething(this Foo<Abs> abs){}
and
public static void DoSomething(this Foo<CLS2> abs){}
Here the second method is "Overriding" the more "generic" abstract type.
This is ony possible with C# because it actually generates a new class for every Generic type. With a language like Java where it uses "Type Erasure Generics" you can't "overload" generic method since everything is really type Object under the hood.