First of all, if you want to use the extension method only for the class, and you have control over this class. You can make this member a class method. Secondly, do you want the method to exist in the class, but on its derived classes? This is not how it should work.
Try to make this method internal, so you have full control over where it is called. If you need it to be publicly available, you can have it belong to the interface and use an implicit implementation, so it will only be available if you create an object.
You can also hide an element from intellisense or make it obsolete ...
But honestly, this does not mean that OOP should work, rethink your design.
It may be worth noting that if you have an extension method with the same name and signature as the actual method, then the preferred method takes preference. That way you can have an extension method for the base class and add the actual method to the derived classes ...
If you do this, why yuu just doesn't have a method and make it virtual. Thus, a derived class can replace an implementation.
Look at your template - see the comments in the code:
public abstract class OptionalParameter { public string GenerateQueryString() {
This means that the extension method is the default implementation. Just make this method virtual:
public abstract class OptionalParameter { public virtual string GenerateQueryString() {
And then you can replace the implementation:
public class CalendarEventParameters : OptionalParameter { public override string GenerateQueryString() {